Compare commits

...

43 Commits

Author SHA1 Message Date
Jan (janneke) Nieuwenhuizen bdb9e83978 ARM: Fix unsigned modulo.
* lib/arm-mes/arm.M1 (mov____%esp,%r3): New macro.
* module/mescc/armv4/as.scm (armv4:r0%r1): Use it to avoid overwriting
%r0 before caling __mesabi_uldiv.
2022-09-12 09:50:57 +02:00
Jan (janneke) Nieuwenhuizen f3993ad26f STUK! 2022-09-12 09:50:57 +02:00
Jan (janneke) Nieuwenhuizen b07618819f wip 2022-09-12 09:50:57 +02:00
Jan (janneke) Nieuwenhuizen 89c21c5fe7 wip 2022-09-12 09:50:57 +02:00
Jan (janneke) Nieuwenhuizen 298420cffe wip 2022-09-12 09:50:57 +02:00
Jan (janneke) Nieuwenhuizen d47f02aee2 wip 2022-09-12 09:50:57 +02:00
Jan (janneke) Nieuwenhuizen 1985a85be0 wip 2022-09-12 09:50:57 +02:00
Jan (janneke) Nieuwenhuizen 8a531e0f1d DRAFT test: Add 60-math-modulo.c.
* lib/tests/scaffold/60-math-modulo.c: New test.
* build-aux/check-mescc.sh (mes_tests): Add it.
2022-09-12 09:50:57 +02:00
Jan (janneke) Nieuwenhuizen 163436cff7 still ok => modulo is problematic 2022-09-11 23:04:24 +02:00
Jan (janneke) Nieuwenhuizen bacdf3bf70 remove cruft 2022-09-11 22:41:27 +02:00
Jan (janneke) Nieuwenhuizen f69f6e412e still OK 2022-09-11 22:39:42 +02:00
Jan (janneke) Nieuwenhuizen 4699c1913d HACK core: Revert math.c -- fixes arm-fsb.s 2022-09-11 22:28:07 +02:00
Jan (janneke) Nieuwenhuizen 6db1ec242c Revert "guix: Update package inputs to new style."
This reverts commit 22f24be26a.
2022-06-01 17:40:20 +02:00
Jan (janneke) Nieuwenhuizen 675b90b824 squash! PORTING gcc minus @7 2022-06-01 14:26:55 +02:00
Jan (janneke) Nieuwenhuizen 9d32bfe92b squash! PORTING guile2.2 2022-06-01 14:24:34 +02:00
Jan (janneke) Nieuwenhuizen ffe0e2c1c7 mescc: Only use signed division when numerator is signed.
Currently, sign-extension (CLTD vs XOR EDX) and signed division (IDIV vs
DIV) selected by setting "signed?".  See, module/mescc/x86/as.scm.
Possibly we need a signed? based on numerator and denominator, and
add a extend-sign? based on the signedness of the numerator?

* module/mescc/compile.scm (expr->register): Base "signed?" strictly on
signedness of numerator.
2022-06-01 14:03:09 +02:00
Jan (janneke) Nieuwenhuizen 95b26ccf6a Revert "mescc: Only use signed division when numerator is signed."
This breaks the --with-bootstrap build and the Guix bootstrap on ARM.

This reverts commit 348dcbcbd7.
2022-05-30 06:46:32 +02:00
Jan (janneke) Nieuwenhuizen 11ef9fa229 WIP ARM: Use mes-style crt1.M1. 2022-05-21 16:09:28 +02:00
Jan (janneke) Nieuwenhuizen 8be532e09c core: Move M2_PTR_SIZE, M2_CELL_SIZE to include file.
* lib/posix/getenv.c (M2_PTR_SIZE),
lib/posix/setenv.c (M2_PTR_SIZE): Move definition...
* include/mes/lib-mini.h (M2_PTR_SIZE): ...here.
* src/gc.c (M2_CELL_SIZE),
src/symbol.c (M2_CELL_SIZE),
src/test/gc.c (M2_CELL_SIZE),
src/vector.c (M2_CELL_SIZE): Move definition...
* include/mes/mes.h (M2_CELL_SIZE): ...here.
2022-05-21 16:09:10 +02:00
Jan (janneke) Nieuwenhuizen 391210574e scaffold: Remove obsolete malloc.
* scaffold/lib/stdlib/malloc.c: Remove.
2022-05-21 16:09:10 +02:00
Jan (janneke) Nieuwenhuizen a4dd86eaa9 wait4: include mes/lib.h for cast 2022-05-21 16:09:10 +02:00
Jan (janneke) Nieuwenhuizen 03a374750c time.c: include sys/time for gettimeofday 2022-05-21 16:09:10 +02:00
Jan (janneke) Nieuwenhuizen eb59ffa1a9 linux/read.c remove extra mes.h include. 2022-05-21 16:09:10 +02:00
Jan (janneke) Nieuwenhuizen 798fe13c16 lib: linux: Add wait4.
* lib/linux/waitpid.c (waitpid): Factor-out wait4 call to...
* lib/linux/wait4.c: ...new file here.
* include/sys/wait.h (wait4): Add prototype.  Include sys/resource.h.
* include/sys/resource.h (struct rusage): Remove gratuitous "int" for
M2-Planet.
* build-aux/configure-lib.sh (libc_SOURCES): Add it.
* kaem.run,
simple.make (M2_SOURCES),
simple.sh: Likewise.  Also add resource.h.
2022-05-21 16:09:10 +02:00
Jan (janneke) Nieuwenhuizen c0820603e8 lib: linux/time: Remove SYS_time specialization.
* lib/linux/time.c (time)[SYS_time]: Remove specialization.
[!SYS_time && !SYS_gettimeofday]: Remove fallback.
2022-05-21 16:09:10 +02:00
Jan (janneke) Nieuwenhuizen 9ab69b6820 kaem: Add kaem.arm and kaem.x86.
* kaem.arm,
kaem.x86: New files.
2022-05-21 16:09:10 +02:00
Jan (janneke) Nieuwenhuizen b693b8f7ca squash! lib: ntoab: M2-Planet Compile fix.
This is a follow-up to commit
    67120c3a21f58308b08b1ddc00ca11a335116577
    DRAFT kaem.run: Remove --bootstrap-mode.

* lib/mes/ntoab.c: Use defined in #if.
2022-05-21 16:09:10 +02:00
Jan (janneke) Nieuwenhuizen 3b29c700b4 DRAFT kaem.run: Remove --bootstrap-mode.
* include/linux/arm/syscall.h,
include/linux/x86/syscall.h,
include/mes/constants.h: Remove CONSTANTs.
* lib/m2/open.c: Move to...
* lib/linux/open.c: ...here.  Update to make gcc-compatible.
* scaffold/argv.kaem: Update accordingly.
* lib/linux/lseek.c (lseek): Suport M2-Planet.
* lib/linux/waitpid.c (waitpid): Suport M2-Planet.
* lib/m2/getcwd.c (PATH_MAX): Remove CONSTANT.
* lib/m2/isatty.c (TCGETS): Remove CONSTANT.
* lib/mes/ntoab.c: Support M2-Planet.
* lib/posix/getcwd.c (__getcwd_buf): Remove.
* lib/posix/getenv.c (M2_PTR_SIZE)[__M2__]: Update to #define.
* lib/posix/setenv.c: Likewise.
* lib/stub/__raise.c (SIGABRT): Remove CONSTANT.
* src/core.c (error): Use __M2__ instead of __M2_PLANET__.
* src/gc.c (M2_CELL_SIZE)[__M2__]: Update to #define.  Support
non-bootstrap-mode.
* src/posix.c: Likewise.
* src/symbol.c: Likewise.
* src/vector.c: Likewise.
* kaem.run: Remove --botstrap-mode.  Update source list accordingly.
* simple.make (M2_PLANET_FLAGS): Remove --bootstrap-mode.
* simple.make (M2_SOURCES, M2_PLANET_INCLUDES): Update source list
accordingly.
2022-05-21 16:09:09 +02:00
Jan (janneke) Nieuwenhuizen fe3dcc66d4 lib: posix/open: Support M2-Planet.
* lib/posix/open.c (open)[__M2__]: New function.
2022-05-21 16:08:27 +02:00
Jan (janneke) Nieuwenhuizen b6d33fd3b2 lib: linux/_open3: Support M2-Planet.
* lib/linux/_open3.c (_open3): Use function casting.  Also call
__ungetc_init.
* lib/stub/__buffered_read.c: New file.
2022-05-21 16:08:27 +02:00
Jan (janneke) Nieuwenhuizen 9232eaf7bc kaem: read: Remove --bootstrap-mode.
* include/mes/lib.h[__M2__](__call_at_exit,abtod,dtoab,ultoa,
* include/sys/types.h[__M2__]: Fall back to unsigned instead of using
unsigned long.
* include/stdio.h[__M2__](fprintf, fscanf, printf, snprintf, sprintf,
sscanf): Hide prototypes.
* lib/stdlib/exit.c (exit)[__M2__]: Hide call to __call_at_exit.
* lib/linux/read.c (read)[__M2__]: Hide debugging.
* lib/linux/malloc.c (malloc)[__M2__]: Hide alignment.
__mesabi_umod, __mesabi_udiv, __mesabi_uldiv): Hide prototypes.
* scaffold/argv.kaem: Use them together with lib/mes/lib-mini.h instead of
lib/mes/* specializations.  Remove --bootstrap-mode from M2-Planet call.
2022-05-21 16:08:27 +02:00
Jan (janneke) Nieuwenhuizen ccd1f64a53 kaem: argv: Remove --bootstrap-mode.
* scaffold/argv.kaem: Use lib/mes/lib-mini.h instead of lib/m2/lib.h.
Remove --bootstrap-mode from M2-Planet call.
2022-05-21 16:08:27 +02:00
Jan (janneke) Nieuwenhuizen 11e291200c kaem: hello: Remove --bootstrap-mode.
* include/mes/lib-mini.h: Remove M2 bootstrap constants.
[__M2__](size_t): Fall-back to unsigned instead of unsigned long.
* scaffold/hello.kaem: Use it instead of lib/m2/lib.h.  Remove
--bootstrap-mode from M2-Planet call.
2022-05-21 16:08:27 +02:00
Jan (janneke) Nieuwenhuizen 3112b851b0 kaem: main: Remove --bootstrap-mode.
* scaffold/main.kaem: Remove --bootstrap-mode from M2-Planet call.
2022-05-21 16:08:27 +02:00
Jan (janneke) Nieuwenhuizen 13a619b713 simple.sh: Resurrect.
* simple.sh: Add src/globals.c, lib/stub/__raise.c.  Use
lib/linux/malloc.c instead of lib/stdlib/malloc.c.
2022-05-21 16:08:27 +02:00
Jan (janneke) Nieuwenhuizen 022a6b9936 simple.make: Resurrect.
* simple.make (M2_PLANET_FLAGS): Add --bootstrap-mode.
(M2_SOURCES): Use lib/mes/mini-write.c instead of lib/mes/write.c
2022-05-21 16:08:27 +02:00
Jan (janneke) Nieuwenhuizen 607a918686 lib: linux/read: Fix compile warnings.
* lib/linux/read.c (read): Cast filedes, buffer to long.
2022-05-21 16:08:27 +02:00
Jan (janneke) Nieuwenhuizen ded879f087 kaem: Fix version.
* src/symbol.c (MES_VERSION): Update to 0.24.
2022-05-21 16:08:27 +02:00
Jan (janneke) Nieuwenhuizen 947898bd70 lib: mes/write: Rename from mes/mini-write.c
* lib/mes/mini-write.c: Move to...
* lib/mes/write.c: ...here.
* build-aux/configure-lib.sh,
kaem.run,
scaffold/argv.kaem,
scaffold/global-array.kaem,
scaffold/hello.kaem,
scaffold/local-array.kaem,
scaffold/local-static-array.kaem,
scaffold/read.kaem,
simple.make,
simple.sh: Update accordingly.
2022-05-21 16:08:27 +02:00
Jan (janneke) Nieuwenhuizen 5a22ea4845 build: Cater for colliding basename in C sources.
This is a follow-up to commit
    f785f8d560
    build: Fix --with-bootstrap build.

* build-aux/cc.sh: Retain directory name in object file name.
* build-aux/bootstrap.sh.in: Likewise.  Compile crt1.c from local
directory.
* build-aux/build-lib.sh: Likewise.
* build-aux/build.sh.in: Remove globals.o hack.
2022-05-21 16:08:27 +02:00
Jan (janneke) Nieuwenhuizen d6f09c560a guix: m2-planet: Update to 1.10.0.
* guix/git/mes.scm (m2-planet): Update to 1.10.0.
2022-05-21 14:18:39 +02:00
Gabriel Wicki b14d08251f core: Simplify math expressions.
* src/gc.c (gc_up_arena): Use division instead of shift.
(gc_flip): Simplify (free-news) * 1.5.
2022-05-21 14:18:38 +02:00
Jan (janneke) Nieuwenhuizen aa7f82a495 build: Also use stage0_cpu detection in bootstrap.sh build.
* build-aux/build-scaffold.sh: Include cflags.sh.
(stage0_cpu): Move to...
* build-aux/cflags.sh (stage0_cpu): ...here.
* build-aux/build.sh.in (stage0_cpu): Remove.
2022-05-21 14:18:10 +02:00
75 changed files with 813 additions and 842 deletions

View File

@ -22,7 +22,7 @@ to your config.scm and run guix system reconfigure.
For example (note: ARM is no longer a 'port', see HACKING) For example (note: ARM is no longer a 'port', see HACKING)
#+BEGIN_SRC bash #+BEGIN_SRC bash
guix shell --system=armhf-linux --pure bash coreutils diffutils findutils gawk gcc-toolchain@7 grep git guile@2.2 gzip help2man make mescc-tools nyacc openssh-sans-x pkg-config sed tar texinfo guix shell --system=armhf-linux --pure bash coreutils diffutils findutils gawk gcc-toolchain grep git guile gzip help2man make mescc-tools nyacc openssh-sans-x pkg-config sed tar texinfo
#+END_SRC #+END_SRC
** Try it ** Try it

View File

@ -1,7 +1,7 @@
#! @SHELL@ #! @SHELL@
# GNU Mes --- Maxwell Equations of Software # GNU Mes --- Maxwell Equations of Software
# Copyright © 2019,2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> # Copyright © 2019,2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
# #
# This file is part of GNU Mes. # This file is part of GNU Mes.
# #
@ -54,13 +54,15 @@ AM_CPPFLAGS="-D HAVE_CONFIG_H=1 -I ${srcdest}include -I ${srcdest}include/$mes_k
AM_CFLAGS="-L ${srcdest}lib" AM_CFLAGS="-L ${srcdest}lib"
mkdir -p $mes_cpu-mes mkdir -p $mes_cpu-mes
$CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}lib/$mes_kernel/$mes_cpu-mes-$compiler/crt1.c cp ${srcdest}lib/$mes_kernel/$mes_cpu-mes-$compiler/crt1.c .
$CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS crt1.c
cp crt1.o $mes_cpu-mes cp crt1.o $mes_cpu-mes
cp crt1.s $mes_cpu-mes cp crt1.s $mes_cpu-mes
objects= objects=
for c in $libc_mini_SOURCES; do for c in $libc_mini_SOURCES; do
o=$(basename $c .c).o b=$(echo $c | sed -re s,^[.]+/,, -e s,/,-,g -e s,[.]c$,,)
o=$b.o
if test ! -e $o -o ${srcdest}$c -nt $o; then if test ! -e $o -o ${srcdest}$c -nt $o; then
echo " CC $c" echo " CC $c"
$CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}$c $CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}$c
@ -72,7 +74,8 @@ $AR crD $mes_cpu-mes/libc-mini.a $objects
objects= objects=
for c in $libmescc_SOURCES; do for c in $libmescc_SOURCES; do
o=$(basename $c .c).o b=$(echo $c | sed -re s,^[.]+/,, -e s,/,-,g -e s,[.]c$,,)
o=$b.o
if test ! -e $o -o ${srcdest}$c -nt $o; then if test ! -e $o -o ${srcdest}$c -nt $o; then
echo " CC $c" echo " CC $c"
$CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}$c $CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}$c
@ -84,7 +87,8 @@ $AR crD $mes_cpu-mes/libmescc.a $objects
objects= objects=
for c in $libc_SOURCES; do for c in $libc_SOURCES; do
o=$(basename $c .c).o b=$(echo $c | sed -re s,^[.]+/,, -e s,/,-,g -e s,[.]c$,,)
o=$b.o
if test ! -e $o -o ${srcdest}$c -nt $o; then if test ! -e $o -o ${srcdest}$c -nt $o; then
echo " CC $c" echo " CC $c"
$CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}$c $CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}$c
@ -96,7 +100,8 @@ $AR crD $mes_cpu-mes/libc.a $objects
objects= objects=
for c in $libc_tcc_SOURCES; do for c in $libc_tcc_SOURCES; do
o=$(basename $c .c).o b=$(echo $c | sed -re s,^[.]+/,, -e s,/,-,g -e s,[.]c$,,)
o=$b.o
if test ! -e $o -o ${srcdest}$c -nt $o; then if test ! -e $o -o ${srcdest}$c -nt $o; then
echo " CC $c" echo " CC $c"
$CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}$c $CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}$c
@ -113,7 +118,8 @@ AM_CFLAGS="-L ${srcdest}lib"
objects= objects=
for c in $mes_SOURCES; do for c in $mes_SOURCES; do
o=$(basename $c .c).o b=$(echo $c | sed -re s,^[.]+/,, -e s,/,-,g -e s,[.]c$,,)
o=$b.o
if test ! -e $o -o ${srcdest}$c -nt $o; then if test ! -e $o -o ${srcdest}$c -nt $o; then
echo " CC $c" echo " CC $c"
$CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}$c $CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}$c

View File

@ -1,7 +1,7 @@
#! /bin/sh #! /bin/sh
# GNU Mes --- Maxwell Equations of Software # GNU Mes --- Maxwell Equations of Software
# Copyright © 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> # Copyright © 2019,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
# #
# This file is part of GNU Mes. # This file is part of GNU Mes.
# #
@ -26,7 +26,8 @@
trap 'test -f .log && cat .log' EXIT trap 'test -f .log && cat .log' EXIT
mkdir -p $mes_cpu-mes mkdir -p $mes_cpu-mes
compile lib/$mes_kernel/$mes_cpu-mes-$compiler/crt1.c cp ${srcdest}lib/$mes_kernel/$mes_cpu-mes-$compiler/crt1.c .
compile crt1.c
cp crt1.o $mes_cpu-mes cp crt1.o $mes_cpu-mes
if test -e crt1.s; then if test -e crt1.s; then
cp crt1.s $mes_cpu-mes cp crt1.s $mes_cpu-mes

View File

@ -1,7 +1,7 @@
#! /bin/sh #! /bin/sh
# GNU Mes --- Maxwell Equations of Software # GNU Mes --- Maxwell Equations of Software
# Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> # Copyright © 2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
# #
# This file is part of GNU Mes. # This file is part of GNU Mes.
# #
@ -29,6 +29,7 @@ fi
. ./config.sh . ./config.sh
. ${srcdest}build-aux/trace.sh . ${srcdest}build-aux/trace.sh
. ${srcdest}build-aux/cflags.sh
if $courageous; then if $courageous; then
set +e set +e
@ -42,25 +43,6 @@ else
} }
fi fi
case "$mes_cpu" in
arm)
stage0_arch=40
stage0_cpu=armv7l
;;
x86_64)
stage0_arch=2
stage0_cpu=amd64
;;
x86)
stage0_arch=1
stage0_cpu=x86
;;
*)
stage0_arch=1
stage0_cpu=$mes_cpu
;;
esac
trace "CCLD ${srcdest}lib/$mes_kernel/$mes_cpu-mes-$compiler/exit-42.S" $CC\ trace "CCLD ${srcdest}lib/$mes_kernel/$mes_cpu-mes-$compiler/exit-42.S" $CC\
-nostdlib\ -nostdlib\
-g\ -g\

View File

@ -38,25 +38,6 @@ set -u
. ./config.sh . ./config.sh
. ${srcdest}build-aux/cflags.sh . ${srcdest}build-aux/cflags.sh
case "$mes_cpu" in
arm)
stage0_arch=40
stage0_cpu=armv7l
;;
x86_64)
stage0_arch=2
stage0_cpu=amd64
;;
x86)
stage0_arch=1
stage0_cpu=x86
;;
*)
stage0_arch=1
stage0_cpu=$mes_cpu
;;
esac
if $courageous; then if $courageous; then
echo "Applying courage" echo "Applying courage"
set +e set +e
@ -170,7 +151,6 @@ fi
${SHELL} ${srcdest}build-aux/build-lib.sh ${SHELL} ${srcdest}build-aux/build-lib.sh
${SHELL} ${srcdest}build-aux/build-source-lib.sh ${SHELL} ${srcdest}build-aux/build-source-lib.sh
if $bootstrap; then if $bootstrap; then
rm -f globals.* # FIXME: avoid name clash with globals from lib
${SHELL} ${srcdest}build-aux/build-mes.sh ${SHELL} ${srcdest}build-aux/build-mes.sh
cp -f bin/mes-mescc ../bin cp -f bin/mes-mescc ../bin
cp -f bin/mes ../bin cp -f bin/mes ../bin

View File

@ -1,5 +1,5 @@
# GNU Mes --- Maxwell Equations of Software # GNU Mes --- Maxwell Equations of Software
# Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> # Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
# #
# This file is part of GNU Mes. # This file is part of GNU Mes.
# #
@ -18,8 +18,12 @@
objects= objects=
compile () { compile () {
c=${srcdest}$1 if test $(dirname $1) = "."; then
b=$(basename $c .c) c=$1
else
c=${srcdest}$1
fi
b=$(echo $c | sed -re s,^[.]+/,, -e s,/,-,g -e s,[.]c$,,)
o=$b.o o=$b.o
objects="$objects $o" objects="$objects $o"
if test ! -e $o -o $c -nt $o; then if test ! -e $o -o $c -nt $o; then
@ -34,7 +38,7 @@ archive () {
sources="$@" sources="$@"
objects= objects=
for c in $sources; do for c in $sources; do
b=$(basename $c .c) b=$(echo $c | sed -re s,^[.]+/,, -e s,/,-,g -e s,[.]c$,,)
o=$b.o o=$b.o
compile $c compile $c
done done

View File

@ -1,5 +1,5 @@
# GNU Mes --- Maxwell Equations of Software # GNU Mes --- Maxwell Equations of Software
# Copyright © 2018,2019,2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> # Copyright © 2018,2019,2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
# #
# This file is part of GNU Mes. # This file is part of GNU Mes.
# #
@ -16,6 +16,25 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. # along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
case "$mes_cpu" in
arm)
stage0_arch=40
stage0_cpu=armv7l
;;
x86_64)
stage0_arch=2
stage0_cpu=amd64
;;
x86)
stage0_arch=1
stage0_cpu=x86
;;
*)
stage0_arch=1
stage0_cpu=$mes_cpu
;;
esac
AM_CPPFLAGS=" AM_CPPFLAGS="
-D HAVE_CONFIG_H=1 -D HAVE_CONFIG_H=1
-I ${srcdest}include -I ${srcdest}include

View File

@ -1,7 +1,7 @@
#! /bin/sh #! /bin/sh
# GNU Mes --- Maxwell Equations of Software # GNU Mes --- Maxwell Equations of Software
# Copyright © 2017,2018,2019,2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> # Copyright © 2017,2018,2019,2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
# #
# This file is part of GNU Mes. # This file is part of GNU Mes.
# #
@ -117,6 +117,7 @@ lib/tests/scaffold/54-argv.c
lib/tests/scaffold/55-char-array.c lib/tests/scaffold/55-char-array.c
lib/tests/scaffold/60-math.c lib/tests/scaffold/60-math.c
lib/tests/scaffold/60-math-itoa.c lib/tests/scaffold/60-math-itoa.c
lib/tests/scaffold/60-math-modulo.c
lib/tests/scaffold/61-array.c lib/tests/scaffold/61-array.c
lib/tests/scaffold/62-array.c lib/tests/scaffold/62-array.c
lib/tests/scaffold/63-struct.c lib/tests/scaffold/63-struct.c

View File

@ -74,7 +74,7 @@ libc_mini_SOURCES="$libc_mini_shared_SOURCES"
if test $mes_libc = mes; then if test $mes_libc = mes; then
libc_mini_SOURCES="$libc_mini_SOURCES libc_mini_SOURCES="$libc_mini_SOURCES
lib/mes/mini-write.c lib/mes/write.c
" "
fi fi
@ -215,6 +215,7 @@ lib/linux/malloc.c
lib/linux/_read.c lib/linux/_read.c
lib/linux/time.c lib/linux/time.c
lib/linux/unlink.c lib/linux/unlink.c
lib/linux/wait4.c
lib/linux/waitpid.c lib/linux/waitpid.c
lib/linux/$mes_cpu-mes-$compiler/syscall.c lib/linux/$mes_cpu-mes-$compiler/syscall.c
lib/linux/getpid.c lib/linux/getpid.c

View File

@ -48,7 +48,6 @@ sed -ri \
include/mes/mes.h \ include/mes/mes.h \
include/mes/symbols.h \ include/mes/symbols.h \
include/mes/builtins.h \ include/mes/builtins.h \
include/m2/lib.h \
src/builtins.c \ src/builtins.c \
src/cc.c \ src/cc.c \
src/core.c \ src/core.c \

View File

@ -1,5 +1,5 @@
;;; GNU Mes --- Maxwell Equations of Software ;;; GNU Mes --- Maxwell Equations of Software
;;; Copyright © 2016,2017,2018,2019,2020,2021,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> ;;; Copyright © 2016,2017,2018,2019,2020,2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; ;;;
;;; This file is part of GNU Mes. ;;; This file is part of GNU Mes.
;;; ;;;
@ -68,7 +68,7 @@
(build-system gnu-build-system) (build-system gnu-build-system)
(supported-systems (supported-systems
'("aarch64-linux" "armhf-linux" "i686-linux" "x86_64-linux")) '("aarch64-linux" "armhf-linux" "i686-linux" "x86_64-linux"))
(native-inputs (list which)) (native-inputs `(("which" ,which)))
(arguments (arguments
`(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")) `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
(string-append "CC=" ,(cc-for-target))) (string-append "CC=" ,(cc-for-target)))
@ -87,7 +87,7 @@ get_machine.")
(define-public m2-planet (define-public m2-planet
(package (package
(name "m2-planet") (name "m2-planet")
(version "1.9.0") (version "1.10.0")
(source (origin (source (origin
(method git-fetch) (method git-fetch)
(uri (git-reference (uri (git-reference
@ -97,8 +97,9 @@ get_machine.")
(file-name (git-file-name name version)) (file-name (git-file-name name version))
(sha256 (sha256
(base32 (base32
"0cgvvq91cbxxm93k8ayyvhpaf3c2lv10qw4wyqwn3hc1qb1cfyvr")))) "03ixvfdzhyy1d94iqpwl0p924pdvdp7yq4ggm05w3c013kzy2y12"))))
(native-inputs (list mescc-tools)) (native-inputs
`(("mescc-tools" ,mescc-tools)))
(build-system gnu-build-system) (build-system gnu-build-system)
(arguments (arguments
`(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")) `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
@ -142,8 +143,10 @@ with introspective steps inbetween.")
"DOCDIR = @prefix@/share/doc/$(PACKAGE_TARNAME)\n")) "DOCDIR = @prefix@/share/doc/$(PACKAGE_TARNAME)\n"))
#t)))) #t))))
(build-system gnu-build-system) (build-system gnu-build-system)
(native-inputs (list pkg-config)) (native-inputs
(inputs (list guile-2.2)) `(("pkg-config" ,pkg-config)))
(inputs
`(("guile" ,guile-2.2)))
(synopsis "LALR(1) Parser Generator in Guile") (synopsis "LALR(1) Parser Generator in Guile")
(description (description
"NYACC is an LALR(1) parser generator implemented in Guile. "NYACC is an LALR(1) parser generator implemented in Guile.
@ -178,7 +181,8 @@ extensive examples, including parsers for the Javascript and C99 languages.")
(sha256 (sha256
(base32 (base32
"065ksalfllbdrzl12dz9d9dcxrv97wqxblslngsc6kajvnvlyvpk")))) "065ksalfllbdrzl12dz9d9dcxrv97wqxblslngsc6kajvnvlyvpk"))))
(inputs (list guile-3.0)))) (inputs
`(("guile" ,guile-3.0)))))
(define-public mes (define-public mes
(package (package
@ -192,28 +196,32 @@ extensive examples, including parsers for the Javascript and C99 languages.")
(base32 #!mes!# "00lrpm4x5qg0l840zhbf9mr67mqhp8gljcl24j5dy0y109gf32w2")))) (base32 #!mes!# "00lrpm4x5qg0l840zhbf9mr67mqhp8gljcl24j5dy0y109gf32w2"))))
(build-system gnu-build-system) (build-system gnu-build-system)
(supported-systems '("aarch64-linux" "armhf-linux" "i686-linux" "x86_64-linux")) (supported-systems '("aarch64-linux" "armhf-linux" "i686-linux" "x86_64-linux"))
(propagated-inputs (list mescc-tools nyacc)) (propagated-inputs
`(("mescc-tools" ,mescc-tools)
("nyacc" ,nyacc)))
(native-inputs (native-inputs
(append `(("guile" ,guile-3.0-latest)
(list guile-3.0) ,@(cond ((string-prefix? "x86_64-linux" (or (%current-target-system)
(let ((target-system (or (%current-target-system) (%current-system)))
(%current-system)))) ;; Use cross-compiler rather than #:system "i686-linux" to get
(cond ;; MesCC 64 bit .go files installed ready for use with Guile.
((string-prefix? "x86_64-linux" target-system) (let ((triplet "i686-unknown-linux-gnu"))
;; Use cross-compiler rather than #:system "i686-linux" to get `(("i686-linux-binutils" ,(cross-binutils triplet))
;; MesCC 64 bit .go files installed ready for use with Guile. ("i686-linux-gcc" ,(cross-gcc triplet)))))
(list (cross-binutils "i686-unknown-linux-gnu") ((string-prefix? "aarch64-linux" (or (%current-target-system)
(cross-gcc "i686-unknown-linux-gnu"))) (%current-system)))
((string-prefix? "aarch64-linux" target-system) ;; Use cross-compiler rather than #:system "armhf-linux" to get
;; Use cross-compiler rather than #:system "armhf-linux" to get ;; MesCC 64 bit .go files installed ready for use with Guile.
;; MesCC 64 bit .go files installed ready for use with Guile. (let ((triplet "arm-linux-gnueabihf"))
(let ((triplet "arm-linux-gnueabihf")) `(("arm-linux-binutils" ,(cross-binutils triplet))
(list (cross-binutils triplet) (cross-gcc triplet)))) ("arm-linux-gcc" ,(cross-gcc triplet)))))
(else (else
'()))) '()))
(list graphviz help2man m2-planet ("graphviz" ,graphviz)
perl ;build-aux/gitlog-to-changelog ("help2man" ,help2man)
texinfo))) ("m2-planet" ,m2-planet)
("perl" ,perl) ; build-aux/gitlog-to-changelog
("texinfo" ,texinfo)))
(arguments (arguments
`(#:strip-binaries? #f)) ; binutil's strip b0rkes MesCC/M1/hex2 binaries `(#:strip-binaries? #f)) ; binutil's strip b0rkes MesCC/M1/hex2 binaries
(native-search-paths (native-search-paths

View File

@ -69,8 +69,11 @@
#define creat(file_name, mode) open (file_name, O_WRONLY | O_CREAT | O_TRUNC, mode) #define creat(file_name, mode) open (file_name, O_WRONLY | O_CREAT | O_TRUNC, mode)
int dup (int old); int dup (int old);
int dup2 (int old, int new); int dup2 (int old, int new);
#if !__M2__
int fcntl (int filedes, int command, ...); int fcntl (int filedes, int command, ...);
int open (char const *s, int flags, ...); int open (char const *s, int flags, ...);
#endif
#endif // ! SYSTEM_LIBC #endif // ! SYSTEM_LIBC

View File

@ -25,47 +25,29 @@
/* libc-mini */ /* libc-mini */
#ifndef SYS_exit #ifndef SYS_exit
// CONSTANT SYS_exit 0x01
#define SYS_exit 0x01 #define SYS_exit 0x01
#endif #endif
#ifndef SYS_write #ifndef SYS_write
// CONSTANT SYS_write 0x04
#define SYS_write 0x04 #define SYS_write 0x04
#endif #endif
/* libc */ /* libc */
// CONSTANT SYS_fork 0x02
#define SYS_fork 0x02 #define SYS_fork 0x02
// CONSTANT SYS_read 0x03
#define SYS_read 0x03 #define SYS_read 0x03
// CONSTANT SYS_open 0x05
#define SYS_open 0x05 #define SYS_open 0x05
//#define SYS_waitpid //#define SYS_waitpid
// CONSTANT SYS_wait4 0x72
#define SYS_wait4 0x72 #define SYS_wait4 0x72
// CONSTANT SYS_execve 0x0b
#define SYS_execve 0x0b #define SYS_execve 0x0b
// CONSTANT SYS_chmod 0x0f
#define SYS_chmod 0x0f #define SYS_chmod 0x0f
// CONSTANT SYS_access 0x21
#define SYS_access 0x21 #define SYS_access 0x21
// CONSTANT SYS_brk 0x2d
#define SYS_brk 0x2d #define SYS_brk 0x2d
// CONSTANT SYS_ioctl 0x36
#define SYS_ioctl 0x36 #define SYS_ioctl 0x36
// CONSTANT SYS_fsync 0x76
#define SYS_fsync 0x76 #define SYS_fsync 0x76
// CONSTANT SYS_getcwd 0xb7
#define SYS_getcwd 0xb7 #define SYS_getcwd 0xb7
// CONSTANT SYS_dup 0x29
#define SYS_dup 0x29 #define SYS_dup 0x29
// CONSTANT SYS_dup2 0x3f
#define SYS_dup2 0x3f #define SYS_dup2 0x3f
// CONSTANT SYS_unlink 0x0a
#define SYS_unlink 0x0a #define SYS_unlink 0x0a
// CONSTANT SYS_gettimeofday 0x4e
#define SYS_gettimeofday 0x4e #define SYS_gettimeofday 0x4e
// CONSTANT SYS_clock_gettime 0x107
#define SYS_clock_gettime 0x107 #define SYS_clock_gettime 0x107
/* libc+tcc */ /* libc+tcc */

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2017,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -22,50 +22,30 @@
/* libc-mini */ /* libc-mini */
#ifndef SYS_exit #ifndef SYS_exit
// CONSTANT SYS_exit 0x01
#define SYS_exit 0x01 #define SYS_exit 0x01
#endif #endif
#ifndef SYS_write #ifndef SYS_write
// CONSTANT SYS_write 0x04
#define SYS_write 0x04 #define SYS_write 0x04
#endif #endif
/* libc */ /* libc */
// CONSTANT SYS_fork 0x02
#define SYS_fork 0x02 #define SYS_fork 0x02
// CONSTANT SYS_read 0x03
#define SYS_read 0x03 #define SYS_read 0x03
// CONSTANT SYS_open 0x05
#define SYS_open 0x05 #define SYS_open 0x05
// CONSTANT SYS_waitpid 0x07
#define SYS_waitpid 0x07 #define SYS_waitpid 0x07
// CONSTANT SYS_wait4 0x72
#define SYS_wait4 0x72 #define SYS_wait4 0x72
// CONSTANT SYS_execve 0x0b
#define SYS_execve 0x0b #define SYS_execve 0x0b
// CONSTANT SYS_chmod 0x0f
#define SYS_chmod 0x0f #define SYS_chmod 0x0f
// CONSTANT SYS_access 0x21
#define SYS_access 0x21 #define SYS_access 0x21
// CONSTANT SYS_brk 0x2d
#define SYS_brk 0x2d #define SYS_brk 0x2d
// CONSTANT SYS_ioctl 0x36
#define SYS_ioctl 0x36 #define SYS_ioctl 0x36
// CONSTANT SYS_fsync 0x76
#define SYS_fsync 0x76 #define SYS_fsync 0x76
// CONSTANT SYS_getcwd 0xb7
#define SYS_getcwd 0xb7 #define SYS_getcwd 0xb7
// CONSTANT SYS_dup 0x29
#define SYS_dup 0x29 #define SYS_dup 0x29
// CONSTANT SYS_dup2 0x3f
#define SYS_dup2 0x3f #define SYS_dup2 0x3f
// CONSTANT SYS_unlink 0x0a
#define SYS_unlink 0x0a #define SYS_unlink 0x0a
// CONSTANT SYS_gettimeofday 0x4e
#define SYS_gettimeofday 0x4e #define SYS_gettimeofday 0x4e
// CONSTANT SYS_clock_gettime 0x109
#define SYS_clock_gettime 0x109 #define SYS_clock_gettime 0x109
// CONSTANT SYS_time 0x0d
#define SYS_time 0x0d #define SYS_time 0x0d
/* libc+tcc */ /* libc+tcc */

View File

@ -1,70 +0,0 @@
/*
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
* GNU Mes is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or (at
* your option) any later version.
*
* GNU Mes is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __M2_LIB_H
#define __M2_LIB_H
char **environ;
int __stdin;
int __stdout;
int __stderr;
int errno;
// CONSTANT EOF 0xffffffff
// CONSTANT __FILEDES_MAX 512
char* cast_intp_to_charp (int *i);
char* cast_long_to_charp (long i);
long cast_charp_to_long (char const *);
long cast_int_to_long (int i);
long cast_voidp_to_long (void const *);
char *itoa (int number);
char *ltoa (long number);
int __ungetc_p (int filedes);
int eputs (char *s);
int oputs (char *s);
int puts (char *s);
size_t strlen (char *s);
ssize_t _write ();
ssize_t write (int filedes, void *buffer, size_t size);
void __ungetc_clear (int filedes);
void __ungetc_init ();
void __ungetc_set (int filedes, int c);
struct timezone
{
int tz_minuteswest;
int tz_dsttime;
};
struct timespec
{
long tv_sec;
long tv_nsec;
};
struct timeval
{
long tv_sec;
long tv_usec;
};
#endif /* __M2_LIB_H */

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -23,76 +23,32 @@
/* Cell types */ /* Cell types */
// CONSTANT TCHAR 0
#define TCHAR 0 #define TCHAR 0
// CONSTANT TBYTES 1
#define TBYTES 1 #define TBYTES 1
// CONSTANT TCLOSURE 2
#define TCLOSURE 2 #define TCLOSURE 2
// CONSTANT TCONTINUATION 3
#define TCONTINUATION 3 #define TCONTINUATION 3
// CONSTANT TKEYWORD 4
#define TKEYWORD 4 #define TKEYWORD 4
// CONSTANT TMACRO 5
#define TMACRO 5 #define TMACRO 5
// CONSTANT TNUMBER 6
#define TNUMBER 6 #define TNUMBER 6
// CONSTANT TPAIR 7
#define TPAIR 7 #define TPAIR 7
// CONSTANT TPORT 8
#define TPORT 8 #define TPORT 8
// CONSTANT TREF 9
#define TREF 9 #define TREF 9
// CONSTANT TSPECIAL 10
#define TSPECIAL 10 #define TSPECIAL 10
// CONSTANT TSTRING 11
#define TSTRING 11 #define TSTRING 11
// CONSTANT TSTRUCT 12
#define TSTRUCT 12 #define TSTRUCT 12
// CONSTANT TSYMBOL 13
#define TSYMBOL 13 #define TSYMBOL 13
// CONSTANT TVALUES 14
#define TVALUES 14 #define TVALUES 14
// CONSTANT TVARIABLE 15
#define TVARIABLE 15 #define TVARIABLE 15
// CONSTANT TVECTOR 16
#define TVECTOR 16 #define TVECTOR 16
// CONSTANT TBROKEN_HEART 17
#define TBROKEN_HEART 17 #define TBROKEN_HEART 17
/* Struct types */ /* Struct types */
// CONSTANT STRUCT_TYPE 0
#define STRUCT_TYPE 0 #define STRUCT_TYPE 0
// CONSTANT STRUCT_PRINTER 1
#define STRUCT_PRINTER 1 #define STRUCT_PRINTER 1
// CONSTANT GC_FRAME_SIZE 5
#define GC_FRAME_SIZE 5 #define GC_FRAME_SIZE 5
// CONSTANT GC_FRAME_PROCEDURE 4
#define GC_FRAME_PROCEDURE 4 #define GC_FRAME_PROCEDURE 4
// CONSTANT STDIN 0
// CONSTANT STDOUT 1
// CONSTANT STDERR 2
/* Unknown type 1
// CONSTANT EOF -1
*/
// CONSTANT O_RDONLY 0
// CONSTANT O_WRONLY 1
// CONSTANT O_CREAT 0x40
// CONSTANT O_TRUNC 0x200
// CONSTANT PATH_MAX 1024
// CONSTANT __FILEDES_MAX 512
// CONSTANT S_IRUSR 00400
// CONSTANT S_IWUSR 00200
// CONSTANT CLOCK_PROCESS_CPUTIME_ID 2
#endif /* __MES_CONSTANTS_H */ #endif /* __MES_CONSTANTS_H */

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -25,21 +25,27 @@
#include <mes/config.h> #include <mes/config.h>
#endif #endif
// CONSTANT STDIN 0
#ifndef STDIN #ifndef STDIN
#define STDIN 0 #define STDIN 0
#endif #endif
// CONSTANT STDOUT 1
#ifndef STDOUT #ifndef STDOUT
#define STDOUT 1 #define STDOUT 1
#endif #endif
// CONSTANT STDERR 2
#ifndef STDERR #ifndef STDERR
#define STDERR 2 #define STDERR 2
#endif #endif
/* M2-Planet does not support pointer arithmetic. Explicitly compensate
for that by multiplying with M2_PTR_SIZE when using (char)
pointers. */
#if __M2__
#define M2_PTR_SIZE 4
#else
#define M2_PTR_SIZE 1
#endif
extern char **environ; extern char **environ;
extern int __stdin; extern int __stdin;
extern int __stdout; extern int __stdout;
@ -63,10 +69,14 @@ int oputs (char const *s);
#ifndef __MES_SIZE_T #ifndef __MES_SIZE_T
#define __MES_SIZE_T #define __MES_SIZE_T
#undef size_t #undef size_t
#if __M2__
typedef unsigned size_t;
#else
typedef unsigned long size_t; typedef unsigned long size_t;
#endif #endif
#endif #endif
#endif #endif
#endif
#ifndef _SSIZE_T #ifndef _SSIZE_T
#define _SSIZE_T #define _SSIZE_T

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019,2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -23,6 +23,9 @@
#include <mes/lib-mini.h> #include <mes/lib-mini.h>
#define __FILEDES_MAX 512
extern char *__brk;
char *cast_intp_to_charp (int const *i); char *cast_intp_to_charp (int const *i);
char *cast_long_to_charp (long i); char *cast_long_to_charp (long i);
long cast_charp_to_long (char const *); long cast_charp_to_long (char const *);
@ -34,14 +37,11 @@ void __ungetc_init ();
void __ungetc_clear (int filedes); void __ungetc_clear (int filedes);
void __ungetc_set (int filedes, int c); void __ungetc_set (int filedes, int c);
int __ungetc_p (int filedes); int __ungetc_p (int filedes);
double abtod (char const **p, int base);
long abtol (char const **p, int base); long abtol (char const **p, int base);
char *dtoab (double number, int base, int signed_p);
char *itoa (int number); char *itoa (int number);
char *ltoa (long number); char *ltoa (long number);
char *ltoab (long x, int base); char *ltoab (long x, int base);
char *ntoab (long number, unsigned base, int signed_p); char *ntoab (long number, unsigned base, int signed_p);
char *ultoa (unsigned long number);
char *utoa (unsigned number); char *utoa (unsigned number);
int eputc (int c); int eputc (int c);
int fdgetc (int fd); int fdgetc (int fd);
@ -61,10 +61,12 @@ char *search_path (char const *file_name);
ssize_t _read (int fd, void *buffer, size_t size); ssize_t _read (int fd, void *buffer, size_t size);
void assert_msg (int check, char *msg); void assert_msg (int check, char *msg);
extern char *__brk; long __mesabi_imod (long a, long b);
extern void (*__call_at_exit) (void); long __mesabi_idiv (long a, long b);
void *__memcpy (void *dest, void const *src, size_t n);
#define __FILEDES_MAX 512 void *__memmove (void *dest, void const *src, size_t n);
void *__memset (void *s, int c, size_t n);
int __raise (int signal);
#if !SYSTEM_LIBC #if !SYSTEM_LIBC
void __assert_fail (char *s); void __assert_fail (char *s);
@ -74,16 +76,15 @@ void _exit (int code);
long brk (void *addr); long brk (void *addr);
#endif // !SYSTEM_LIBC #endif // !SYSTEM_LIBC
long __mesabi_imod (long a, long b); #if !__M2__
long __mesabi_idiv (long a, long b); extern void (*__call_at_exit) (void);
double abtod (char const **p, int base);
char *dtoab (double number, int base, int signed_p);
char *ultoa (unsigned long number);
unsigned long __mesabi_umod (unsigned long a, unsigned long b); unsigned long __mesabi_umod (unsigned long a, unsigned long b);
unsigned long __mesabi_udiv (unsigned long a, unsigned long b); unsigned long __mesabi_udiv (unsigned long a, unsigned long b);
unsigned long __mesabi_uldiv (unsigned long a, unsigned long b, unsigned long __mesabi_uldiv (unsigned long a, unsigned long b,
unsigned long *remainder); unsigned long *remainder);
#endif
void *__memcpy (void *dest, void const *src, size_t n);
void *__memmove (void *dest, void const *src, size_t n);
void *__memset (void *s, int c, size_t n);
int __raise (int signal);
#endif //__MES_LIB_H #endif //__MES_LIB_H

View File

@ -53,6 +53,15 @@ struct scm
}; };
}; };
/* M2-Planet does not support pointer arithmetic. Explicitly compensate
for that by multiplying with M2_CELL_SIZE when using cell
pointers. */
#if __M2__
#define M2_CELL_SIZE 12
#else
#define M2_CELL_SIZE 1
#endif
/* mes */ /* mes */
extern char *g_datadir; extern char *g_datadir;
extern int g_debug; extern int g_debug;

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019,2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2021,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -137,14 +137,8 @@ extern struct scm *cell_type_broken_heart;
extern struct scm *cell_symbol_program; extern struct scm *cell_symbol_program;
extern struct scm *cell_symbol_test; extern struct scm *cell_symbol_test;
// CONSTANT SYMBOL_MAX 114
#define SYMBOL_MAX 114 #define SYMBOL_MAX 114
// CONSTANT CELL_UNSPECIFIED 7
#define CELL_UNSPECIFIED 7 #define CELL_UNSPECIFIED 7
// CONSTANT CELL_SYMBOL_RECORD_TYPE 82
#define CELL_SYMBOL_RECORD_TYPE 82 #define CELL_SYMBOL_RECORD_TYPE 82
#endif /* __MES_SYMBOLS_H */ #endif /* __MES_SYMBOLS_H */

View File

@ -29,9 +29,12 @@
#define _SIGSET_NITEMS (_NSIG / (8 * sizeof(unsigned long))) #define _SIGSET_NITEMS (_NSIG / (8 * sizeof(unsigned long)))
typedef struct { #if !__M2__
typedef struct
{
unsigned long items[_SIGSET_NITEMS]; unsigned long items[_SIGSET_NITEMS];
} sigset_t; } sigset_t;
#endif
typedef long stack_t; typedef long stack_t;
#include <sys/types.h> #include <sys/types.h>
@ -91,6 +94,7 @@ typedef long stack_t;
#define SA_NOMASK SA_NODEFER #define SA_NOMASK SA_NODEFER
#define SA_ONESHOT SA_RESETHAND #define SA_ONESHOT SA_RESETHAND
#if !__M2__ // lacks short, casts
typedef struct siginfo_t typedef struct siginfo_t
{ {
int si_signo; int si_signo;
@ -120,7 +124,7 @@ typedef struct siginfo_t
} siginfo_t; } siginfo_t;
// *INDENT-ON* // *INDENT-ON*
#if __MESC__ #if __M2__ || __MESC__
typedef long sighandler_t; typedef long sighandler_t;
#else #else
typedef void (*sighandler_t) (int); typedef void (*sighandler_t) (int);
@ -255,6 +259,7 @@ int sigemptyset (sigset_t * set);
#endif #endif
int sigprocmask (int how, sigset_t const *set, sigset_t * oldset); int sigprocmask (int how, sigset_t const *set, sigset_t * oldset);
#endif // !__M2__
#endif //! SYSTEM_LIBC #endif //! SYSTEM_LIBC
#endif // __MES_SIGNAL_H #endif // __MES_SIGNAL_H

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -65,30 +65,33 @@ int ferror (FILE * stream);
int fflush (FILE * stream); int fflush (FILE * stream);
int fgetc (FILE * stream); int fgetc (FILE * stream);
char *fgets (char *s, int size, FILE * stream); char *fgets (char *s, int size, FILE * stream);
int fprintf (FILE * stream, char const *format, ...);
int fpurge (FILE * stream); int fpurge (FILE * stream);
int fputc (int c, FILE * stream); int fputc (int c, FILE * stream);
int fputs (char const *s, FILE * stream); int fputs (char const *s, FILE * stream);
int fscanf (FILE * stream, char const *template, ...);
int fseek (FILE * stream, long offset, int whence); int fseek (FILE * stream, long offset, int whence);
int getc (FILE * stream); int getc (FILE * stream);
int getchar (void); int getchar (void);
char *getlogin (void); char *getlogin (void);
int printf (char const *format, ...);
int putc (int c, FILE * stream); int putc (int c, FILE * stream);
int putchar (int c); int putchar (int c);
int puts (char const *s); int puts (char const *s);
int remove (char const *file_name); int remove (char const *file_name);
int setvbuf (FILE * stream, char *buf, int mode, size_t size); int setvbuf (FILE * stream, char *buf, int mode, size_t size);
int snprintf (char *str, size_t size, char const *format, ...);
int sprintf (char *str, char const *format, ...);
int sscanf (char const *str, char const *format, ...);
int ungetc (int c, FILE * stream); int ungetc (int c, FILE * stream);
long ftell (FILE * stream); long ftell (FILE * stream);
size_t fread (void *ptr, size_t size, size_t count, FILE * stream); size_t fread (void *ptr, size_t size, size_t count, FILE * stream);
size_t freadahead (FILE * fp); size_t freadahead (FILE * fp);
size_t fwrite (void const *ptr, size_t size, size_t count, FILE * stream); size_t fwrite (void const *ptr, size_t size, size_t count, FILE * stream);
#if !__M2__
int fprintf (FILE * stream, char const *format, ...);
int fscanf (FILE * stream, char const *template, ...);
int printf (char const *format, ...);
int snprintf (char *str, size_t size, char const *format, ...);
int sprintf (char *str, char const *format, ...);
int sscanf (char const *str, char const *format, ...);
#endif // !__M2__
#endif // ! SYSTEM_LIBC #endif // ! SYSTEM_LIBC
#endif // __MES_STDIO_H #endif // __MES_STDIO_H

View File

@ -28,8 +28,13 @@
#define TCGETS 0x5401 #define TCGETS 0x5401
#define TCGETA 0x5405 #define TCGETA 0x5405
#if __M2__
int ioctl (int fd, unsigned request, long data);
int ioctl3 (int fd, unsigned request, long data);
#else
int ioctl (int fd, unsigned long request, ...); int ioctl (int fd, unsigned long request, ...);
int ioctl3 (int fd, unsigned long request, long data); int ioctl3 (int fd, unsigned long request, long data);
#endif
#endif // ! SYSTEM_LIBC #endif // ! SYSTEM_LIBC

View File

@ -32,20 +32,20 @@ struct rusage
{ {
struct timeval ru_utime; struct timeval ru_utime;
struct timeval ru_stime; struct timeval ru_stime;
long int ru_maxrss; long ru_maxrss;
long int ru_ixrss; long ru_ixrss;
long int ru_idrss; long ru_idrss;
long int ru_isrss; long ru_isrss;
long int ru_minflt; long ru_minflt;
long int ru_majflt; long ru_majflt;
long int ru_nswap; long ru_nswap;
long int ru_inblock; long ru_inblock;
long int ru_oublock; long ru_oublock;
long int ru_msgsnd; long ru_msgsnd;
long int ru_msgrcv; long ru_msgrcv;
long int ru_nsignals; long ru_nsignals;
long int ru_nvcsw; long ru_nvcsw;
long int ru_nivcsw; long ru_nivcsw;
}; };
#define RUSAGE_SELF 0 #define RUSAGE_SELF 0

View File

@ -36,7 +36,29 @@ typedef int mode_t;
#endif #endif
// *INDENT-OFF* // *INDENT-OFF*
#if __i386__ || __arm__ #if __M2__
struct stat
{
unsigned st_dev;
unsigned st_ino;
char st_mode[2];
char st_nlink[2];
char st_uid[2];
char st_gid[2];
unsigned st_rdev;
long st_size; /* Linux: unsigned long; glibc: off_t (i.e. signed) */
unsigned st_blksize;
unsigned st_blocks;
time_t st_atime; /* Linux: unsigned long; glibc: time_t */
unsigned st_atime_usec;
time_t st_mtime; /* Linux: unsigned long; glibc: time_t */
unsigned st_mtime_usec;
time_t st_ctime; /* Linux: unsigned long; glibc: time_t */
unsigned st_ctime_usec;
unsigned __foo0;
unsigned __foo1;
};
#elif __i386__ || __arm__
struct stat struct stat
{ {
unsigned long st_dev; unsigned long st_dev;

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2017,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -66,15 +66,23 @@ typedef unsigned gid_t;
#ifndef __MES_INO_T #ifndef __MES_INO_T
#define __MES_INO_T #define __MES_INO_T
#undef ino_t #undef ino_t
#if __M2__
typedef unsigned ino_t;
#else
typedef unsigned long ino_t; typedef unsigned long ino_t;
#endif #endif
#endif
#if __SIZEOF_LONG_LONG__ == 8 #if __SIZEOF_LONG_LONG__ == 8
#ifndef __MES_INO64_T #ifndef __MES_INO64_T
#define __MES_INO64_T #define __MES_INO64_T
#undef ino64_t #undef ino64_t
#if __M2__
typedef unsigned ino64_t;
#else
typedef unsigned long long ino64_t; typedef unsigned long long ino64_t;
#endif #endif
#endif
#endif // __SIZEOF_LONG_LONG__ == 8 #endif // __SIZEOF_LONG_LONG__ == 8
#if !defined (__MES_INTPTR_T) && !defined (__intptr_t_defined) #if !defined (__MES_INTPTR_T) && !defined (__intptr_t_defined)
@ -83,8 +91,12 @@ typedef unsigned long long ino64_t;
#undef intptr_t #undef intptr_t
typedef long intptr_t; typedef long intptr_t;
#undef uintptr_t #undef uintptr_t
#if __M2__
typedef unsigned uintptr_t;
#else
typedef unsigned long uintptr_t; typedef unsigned long uintptr_t;
#endif #endif
#endif
#ifndef __MES_OFF_T #ifndef __MES_OFF_T
#define __MES_OFF_T #define __MES_OFF_T
@ -96,8 +108,12 @@ typedef long off_t;
#ifndef __MES_OFF64_T #ifndef __MES_OFF64_T
#define __MES_OFF64_T #define __MES_OFF64_T
#undef off64_t #undef off64_t
#if __M2__
typedef unsigned off64_t;
#else
typedef unsigned long long off64_t; typedef unsigned long long off64_t;
#endif #endif
#endif
#endif // __SIZEOF_LONG_LONG__ == 8 #endif // __SIZEOF_LONG_LONG__ == 8
#ifndef __MES_PID_T #ifndef __MES_PID_T
@ -126,9 +142,13 @@ typedef long sigval_t;
#ifndef __MES_SIZE_T #ifndef __MES_SIZE_T
#define __MES_SIZE_T #define __MES_SIZE_T
#undef size_t #undef size_t
#if __M2__
typedef unsigned size_t;
#else
typedef unsigned long size_t; typedef unsigned long size_t;
#endif #endif
#endif #endif
#endif
#ifndef __MES_SSIZE_T #ifndef __MES_SSIZE_T
#define __MES_SSIZE_T #define __MES_SSIZE_T

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -20,6 +20,8 @@
#ifndef __MES_SYS_WAIT_H #ifndef __MES_SYS_WAIT_H
#define __MES_SYS_WAIT_H 1 #define __MES_SYS_WAIT_H 1
#include <sys/resource.h>
#if SYSTEM_LIBC #if SYSTEM_LIBC
#undef __MES_SYS_WAIT_H #undef __MES_SYS_WAIT_H
#include_next <sys/wait.h> #include_next <sys/wait.h>
@ -35,6 +37,8 @@ typedef int pid_t;
pid_t waitpid (pid_t pid, int *status_ptr, int options); pid_t waitpid (pid_t pid, int *status_ptr, int options);
pid_t wait (int *status_ptr); pid_t wait (int *status_ptr);
pid_t wait4 (pid_t pid, int *wstatus, int options,
struct rusage *rusage);
#endif // ! SYSTEM_LIBC #endif // ! SYSTEM_LIBC

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2017,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -27,8 +27,8 @@
#ifndef __MES_TIME_T #ifndef __MES_TIME_T
#define __MES_TIME_T 1 #define __MES_TIME_T 1
typedef long int clockid_t; typedef long clockid_t;
typedef long int time_t; typedef long time_t;
#endif #endif
struct tm struct tm

24
kaem.arm Normal file
View File

@ -0,0 +1,24 @@
#! /bin/sh
# Copyright © 2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
#
# This file is part of GNU Mes.
#
# GNU Mes is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or (at
# your option) any later version.
#
# GNU Mes is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
# Usage:
# kaem --verbose --strict
mes_cpu=arm
stage0_cpu=armv7l
kaem --verbose --strict

View File

@ -25,34 +25,41 @@ stage0_cpu=${stage0_cpu:-x86}
mkdir -p m2 mkdir -p m2
M2-Planet \ M2-Planet \
--bootstrap-mode \
--debug \ --debug \
--architecture ${stage0_cpu} \ --architecture ${stage0_cpu} \
-f include/m2/lib.h \ -D __linux__=1 \
-f include/mes/config.h \
-f include/mes/lib-mini.h \
-f include/mes/lib.h \
-f lib/linux/${mes_cpu}-mes-m2/crt1.c \ -f lib/linux/${mes_cpu}-mes-m2/crt1.c \
-f lib/linux/${mes_cpu}-mes-m2/_exit.c \ -f lib/linux/${mes_cpu}-mes-m2/_exit.c \
-f lib/linux/${mes_cpu}-mes-m2/_write.c \ -f lib/linux/${mes_cpu}-mes-m2/_write.c \
-f lib/mes/globals.c \ -f lib/mes/globals.c \
-f lib/m2/cast.c \ -f lib/m2/cast.c \
-f lib/m2/exit.c \ -f lib/stdlib/exit.c \
-f lib/mes/mini-write.c \ -f lib/mes/write.c \
-f lib/linux/${mes_cpu}-mes-m2/syscall.c \
-f include/linux/${mes_cpu}/syscall.h \ -f include/linux/${mes_cpu}/syscall.h \
-f lib/linux/${mes_cpu}-mes-m2/syscall.c \
-f lib/stub/__raise.c \ -f lib/stub/__raise.c \
-f lib/linux/brk.c \ -f lib/linux/brk.c \
-f lib/m2/malloc.c \ -f lib/linux/malloc.c \
-f lib/string/memset.c \ -f lib/string/memset.c \
-f lib/m2/read.c \ -f lib/linux/read.c \
-f lib/mes/fdgetc.c \ -f lib/mes/fdgetc.c \
-f lib/stdio/getchar.c \ -f lib/stdio/getchar.c \
-f lib/stdio/putchar.c \ -f lib/stdio/putchar.c \
-f lib/m2/open.c \ -f lib/stub/__buffered_read.c \
-f lib/m2/mes_open.c \ -f lib/linux/_open3.c \
-f lib/linux/open.c \
-f lib/mes/mes_open.c \
-f lib/string/strlen.c \ -f lib/string/strlen.c \
-f lib/mes/eputs.c \ -f lib/mes/eputs.c \
-f lib/mes/fdputc.c \ -f lib/mes/fdputc.c \
-f lib/mes/eputc.c \ -f lib/mes/eputc.c \
\ \
-f include/time.h \
-f include/sys/time.h \
-f include/sys/types.h \
-f include/mes/mes.h \ -f include/mes/mes.h \
-f include/mes/builtins.h \ -f include/mes/builtins.h \
-f include/mes/constants.h \ -f include/mes/constants.h \
@ -81,17 +88,22 @@ M2-Planet \
-f lib/mes/fdungetc.c \ -f lib/mes/fdungetc.c \
-f lib/posix/setenv.c \ -f lib/posix/setenv.c \
-f lib/linux/access.c \ -f lib/linux/access.c \
-f lib/m2/chmod.c \ -f include/sys/stat.h \
-f lib/linux/chmod.c \
-f lib/linux/ioctl3.c \ -f lib/linux/ioctl3.c \
-f include/sys/ioctl.h \
-f lib/m2/isatty.c \ -f lib/m2/isatty.c \
-f lib/linux/fork.c \ -f lib/linux/fork.c \
-f lib/m2/execve.c \ -f lib/m2/execve.c \
-f lib/m2/execv.c \ -f lib/m2/execv.c \
-f lib/m2/waitpid.c \ -f include/sys/resource.h \
-f lib/linux/wait4.c \
-f lib/linux/waitpid.c \
-f lib/linux/gettimeofday.c \ -f lib/linux/gettimeofday.c \
-f lib/m2/clock_gettime.c \ -f lib/linux/clock_gettime.c \
-f lib/m2/time.c \ -f lib/m2/time.c \
-f lib/linux/_getcwd.c \ -f lib/linux/_getcwd.c \
-f include/limits.h \
-f lib/m2/getcwd.c \ -f lib/m2/getcwd.c \
-f lib/linux/dup.c \ -f lib/linux/dup.c \
-f lib/linux/dup2.c \ -f lib/linux/dup2.c \
@ -102,6 +114,7 @@ M2-Planet \
-f src/core.c \ -f src/core.c \
-f src/display.c \ -f src/display.c \
-f src/eval-apply.c \ -f src/eval-apply.c \
-f include/fcntl.h \
-f src/gc.c \ -f src/gc.c \
-f src/hash.c \ -f src/hash.c \
-f src/lib.c \ -f src/lib.c \
@ -109,6 +122,7 @@ M2-Planet \
-f src/math.c \ -f src/math.c \
-f src/mes.c \ -f src/mes.c \
-f src/module.c \ -f src/module.c \
-f include/signal.h \
-f src/posix.c \ -f src/posix.c \
-f src/reader.c \ -f src/reader.c \
-f src/stack.c \ -f src/stack.c \

24
kaem.x86 Normal file
View File

@ -0,0 +1,24 @@
#! /bin/sh
# Copyright © 2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
#
# This file is part of GNU Mes.
#
# GNU Mes is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or (at
# your option) any later version.
#
# GNU Mes is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
# Usage:
# kaem --verbose --strict
mes_cpu=x86
stage0_cpu=x86
kaem --verbose --strict

View File

@ -1,5 +1,5 @@
### GNU Mes --- Maxwell Equations of Software ### GNU Mes --- Maxwell Equations of Software
### Copyright © 2017,2018,2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> ### Copyright © 2017,2018,2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
### Copyright © 2019,2020 Danny Milosavljevic <dannym@scratchpost.org> ### Copyright © 2019,2020 Danny Milosavljevic <dannym@scratchpost.org>
### ###
### This file is part of GNU Mes. ### This file is part of GNU Mes.
@ -31,6 +31,7 @@ DEFINE add____$i8,%r0 0090e2 # adds r0, r0, #xx; ADDSI = immediate op1 '09' op
# 1090e2 # adds r1, r0, #xx; ADDSI = immediate op1 '09' op2 'e2' # 1090e2 # adds r1, r0, #xx; ADDSI = immediate op1 '09' op2 'e2'
DEFINE add____$i8,%r1 1091e2 # adds r1, r1, #xx DEFINE add____$i8,%r1 1091e2 # adds r1, r1, #xx
DEFINE add____$i8,%r13 d09de2 # adds r13, r13, #xx DEFINE add____$i8,%r13 d09de2 # adds r13, r13, #xx
DEFINE add____$i8,%ebp e28cc0 # adds ip, ip, #xx
DEFINE sub____$i8,%r0 0050e2 # subs r0, r0, #xx DEFINE sub____$i8,%r0 0050e2 # subs r0, r0, #xx
DEFINE sub____$i8,%r1 1051e2 # subs r1, r1, #xx DEFINE sub____$i8,%r1 1051e2 # subs r1, r1, #xx
DEFINE add____%r0,%r0 000090e0 # adds r0, r0, r0 DEFINE add____%r0,%r0 000090e0 # adds r0, r0, r0
@ -91,6 +92,7 @@ DEFINE mov____%r0,(%r1) 000081e5
DEFINE mov____%r1,%r0 0100a0e1 DEFINE mov____%r1,%r0 0100a0e1
DEFINE mov____%r1,%r2 0120a0e1 DEFINE mov____%r1,%r2 0120a0e1
DEFINE mov____%esp,%r0 0d00a0e1 DEFINE mov____%esp,%r0 0d00a0e1
DEFINE mov____%esp,%r3 0d30a0e1
# e59f9004 ldr r9, [pc, #4] ; <L1> # e59f9004 ldr r9, [pc, #4] ; <L1>
# e5890000 str r0, [r9] # e5890000 str r0, [r9]

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -26,7 +26,9 @@
int int
_open3 (char const *file_name, int flags, int mask) _open3 (char const *file_name, int flags, int mask)
{ {
int r = _sys_call3 (SYS_open, (long) file_name, (int) flags, (int) mask); long long_file_name = cast_int_to_long (file_name);
int r = _sys_call3 (SYS_open, long_file_name, flags, mask);
__ungetc_init ();
if (r > 2) if (r > 2)
{ {
__ungetc_clear (r); __ungetc_clear (r);

View File

@ -1,6 +1,7 @@
### GNU Mes --- Maxwell Equations of Software ### GNU Mes --- Maxwell Equations of Software
### Copyright (C) 2016 Jeremiah Orians ### Copyright (C) 2016 Jeremiah Orians
### Copyright © 2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> ### Copyright © 2017,2018,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
### Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>
### ###
### This file is part of GNU Mes. ### This file is part of GNU Mes.
### ###
@ -17,6 +18,47 @@
### You should have received a copy of the GNU General Public License ### You should have received a copy of the GNU General Public License
### along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. ### along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
:UNUSED_start
;; ??? from M2
'0' SP BP NO_SHIFT MOVE_ALWAYS ; Setup Base Pointer
push___%lr
push___%ebp
mov____%esp,%ebp
allocate_stack_4180
!0 mov____$i8,%r0
mov____%r0,0x32 &GLOBAL___stdin
!1 mov____$i8,%r0
mov____%r0,0x32 &GLOBAL___stdout
!2 mov____$i8,%r0
mov____%r0,0x32 &GLOBAL___stderr
!8 ldr____%r0,(%fp,+#$i8)
mov____%fp,%r1
!12 add____%r1,$i8
add____%r2,%r1,%r0,lsl#2
!4 add____%r2,$i8
mov____%r2,0x32 &GLOBAL_environ
; M2-Planet calling convention pushes forward
push___%r0 ; argc
push___%r1 ; argv
push___%r2 ; environ
!4 add____$i8,%ebp ;M2-Planet calling convention
^~FUNCTION_main bl
!0x0 add____$i8,%esp
!0x0 cmp____$i8,%r0
SYS_exit mov____$i8,%r7
swi____$0
:__start_loop
wfi
!0x1 mov____$i8,%r0
!0x0 cmp____$i8,%r0
^~__start_loop b
mov____%ebp,%esp
pop____%ebp
ret
:_start :_start
'0' SP BP NO_SHIFT MOVE_ALWAYS ; Setup Base Pointer '0' SP BP NO_SHIFT MOVE_ALWAYS ; Setup Base Pointer

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -24,23 +24,13 @@
#include <stdio.h> #include <stdio.h>
#include <sys/types.h> #include <sys/types.h>
#if !__MESC__ /* FIXME: We want bin/mes-mescc's x86-linux sha256sum to stay the same. */
off_t
_lseek (int filedes, off_t offset, int whence)
{
return _sys_call3 (SYS_lseek, (int) filedes, (long) offset, (int) whence);
}
#endif
off_t off_t
lseek (int filedes, off_t offset, int whence) lseek (int filedes, off_t offset, int whence)
{ {
#if !__MESC__ /* FIXME: We want bin/mes-mescc's x86-linux sha256sum to stay the same. */ long long_filedes = filedes;
if (_lseek (filedes, 0, SEEK_CUR) == -1) long long_offset = offset;
return -1;
#endif
size_t skip = __buffered_read_clear (filedes); size_t skip = __buffered_read_clear (filedes);
if (whence == SEEK_CUR) if (whence == SEEK_CUR)
offset -= skip; offset -= skip;
return _sys_call3 (SYS_lseek, (int) filedes, (long) offset, (int) whence); return _sys_call3 (SYS_lseek, long_filedes, long_offset, whence);
} }

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019,2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2021,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2021 Danny Milosavljevic <dannym@scratchpost.org> * Copyright © 2021 Danny Milosavljevic <dannym@scratchpost.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
@ -31,9 +31,11 @@ malloc (size_t size)
{ {
if (!__brk) if (!__brk)
__brk = cast_long_to_charp (brk (0)); __brk = cast_long_to_charp (brk (0));
#if !__M2__
/* align what we give back. */ /* align what we give back. */
__brk = (char*) (((uintptr_t) __brk __brk = (char*) (((uintptr_t) __brk
+ sizeof (max_align_t) - 1) & -sizeof (max_align_t)); + sizeof (max_align_t) - 1) & -sizeof (max_align_t));
#endif
if (brk (__brk + size) == -1) if (brk (__brk + size) == -1)
return 0; return 0;
char *p = __brk; char *p = __brk;

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -22,6 +22,7 @@
#include <fcntl.h> #include <fcntl.h>
#include <stdarg.h> #include <stdarg.h>
#if __M2__
int int
open (char *file_name, int flags, int mask) open (char *file_name, int flags, int mask)
{ {
@ -30,3 +31,17 @@ open (char *file_name, int flags, int mask)
__ungetc_clear (r); __ungetc_clear (r);
return r; return r;
} }
#else // !__M2__
int
open (char const *file_name, int flags, ...)
{
va_list ap;
va_start (ap, flags);
int mask = va_arg (ap, int);
int r = _sys_call3 (SYS_open, (long) file_name, flags, mask);
va_end (ap);
if (r > 2)
__ungetc_clear (r);
return r;
}
#endif // __M2__

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -18,16 +18,18 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. * along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <mes/lib.h>
#include <linux/syscall.h> #include <linux/syscall.h>
#include <syscall.h> #include <syscall.h>
#include <mes/lib.h>
#include <fcntl.h> #include <fcntl.h>
ssize_t ssize_t
read (int filedes, void *buffer, size_t size) read (int filedes, void *buffer, size_t size)
{ {
long long_filedes = filedes; long long_filedes = filedes;
ssize_t bytes = _sys_call3 (SYS_read, long_filedes, buffer, size); long long_buffer = cast_voidp_to_long (buffer);
ssize_t bytes = _sys_call3 (SYS_read, long_filedes, long_buffer, size);
#if !__M2__
if (__mes_debug () > 4) if (__mes_debug () > 4)
{ {
if (bytes == 1) if (bytes == 1)
@ -48,5 +50,6 @@ read (int filedes, void *buffer, size_t size)
eputs ("\n"); eputs ("\n");
} }
} }
#endif
return bytes; return bytes;
} }

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -21,14 +21,8 @@
#include <linux/syscall.h> #include <linux/syscall.h>
#include <syscall.h> #include <syscall.h>
#include <time.h> #include <time.h>
#include <stdlib.h>
/* Linux' SYS_time syscall is a compatibility shim for SYS_gettimeofday.
Therefore, prefer SYS_gettimeofday. */
#if defined (SYS_gettimeofday)
#include <sys/time.h> #include <sys/time.h>
#include <stdlib.h>
time_t time_t
time (time_t * result) time (time_t * result)
@ -41,31 +35,3 @@ time (time_t * result)
*result = tv.tv_sec; *result = tv.tv_sec;
return tv.tv_sec; return tv.tv_sec;
} }
#elif defined (SYS_time)
time_t
time (time_t * result)
{
return _sys_call1 (SYS_time, (long) result);
}
#else
#warning there is no time
#include <mes/lib.h>
time_t
time (time_t * result)
{
static int stub = 0;
if (__mes_debug () && !stub)
eputs ("time stub\n");
stub = 1;
if (result)
*result = 0;
return 0;
}
#endif

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019,2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -22,18 +22,15 @@
#include <linux/syscall.h> #include <linux/syscall.h>
#include <syscall.h> #include <syscall.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/resource.h>
int pid_t
waitpid (int pid, int *status_ptr, int options) wait4 (pid_t pid, int *status_ptr, int options, struct rusage *rusage)
{ {
long long_pid = pid; long long_pid = pid;
long long_status_ptr = cast_voidp_to_long (status_ptr); long long_status_ptr = cast_voidp_to_long (status_ptr);
long long_options = options; long long_options = options;
//##if __i386__ long long_rusage = cast_voidp_to_long (rusage);
//# return _sys_call3 (SYS_waitpid, long_pid, long_status_ptr, long_options); return _sys_call4 (SYS_wait4, long_pid, long_status_ptr, long_options,
//##elif __x86_64__ || __arm__ long_rusage);
return _sys_call4 (SYS_wait4, long_pid, long_status_ptr, long_options, 0);
//##else
//##error arch not supported
//##endif
} }

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -25,11 +25,12 @@
pid_t pid_t
waitpid (pid_t pid, int *status_ptr, int options) waitpid (pid_t pid, int *status_ptr, int options)
{ {
#if __i386__ long long_pid = pid;
return _sys_call3 (SYS_waitpid, (long) pid, (long) status_ptr, (int) options); long long_status_ptr = cast_voidp_to_long (status_ptr);
#elif __x86_64__ || __arm__ long long_options = options;
return _sys_call4 (SYS_wait4, (long) pid, (long) status_ptr, (int) options, 0); #if SYS_waitpid
#else return _sys_call3 (SYS_waitpid, long_pid, long_status_ptr, long_options);
#error arch not supported #elif SYS_wait4
return wait4 (pid, status_ptr, options, 0);
#endif #endif
} }

View File

@ -1,31 +0,0 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
* GNU Mes is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or (at
* your option) any later version.
*
* GNU Mes is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <sys/stat.h>
int
chmod (char const *file_name, int mask)
{
long long_file_name = file_name;
long long_mask = mask;
return _sys_call2 (SYS_chmod, long_file_name, long_mask);
}

View File

@ -1,30 +0,0 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
* GNU Mes is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or (at
* your option) any later version.
*
* GNU Mes is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <time.h>
int
clock_gettime (long clk_id, struct timespec *tp)
{
long long_tp = tp;
return _sys_call2 (SYS_clock_gettime, clk_id, tp);
}

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019,2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -24,8 +24,6 @@
#include <stdlib.h> #include <stdlib.h>
#include <sys/types.h> #include <sys/types.h>
// CONSTANT PATH_MAX 1024
char *__getcwd_buf; char *__getcwd_buf;
char * char *

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019,2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -24,7 +24,6 @@
#include <string.h> #include <string.h>
#include <termio.h> #include <termio.h>
// CONSTANT TCGETS 0x5401
#define TCGETS 0x5401 #define TCGETS 0x5401
struct ktermios struct ktermios

View File

@ -1,36 +0,0 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019,2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
* GNU Mes is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or (at
* your option) any later version.
*
* GNU Mes is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <mes/lib.h>
#include <string.h>
char *__brk = 0;
void *
malloc (size_t size)
{
if (!__brk)
__brk = cast_long_to_charp (brk (0));
if (brk (__brk + size) == -1)
return 0;
char *p = __brk;
__brk = __brk + size;
return p;
}

View File

@ -1,28 +0,0 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
* GNU Mes is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or (at
* your option) any later version.
*
* GNU Mes is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
int
mes_open (char *file_name, int flags, int mask)
{
int filedes = open (file_name, flags, mask);
if (filedes > 2)
__ungetc_clear (filedes);
return filedes;
}

View File

@ -1,31 +0,0 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2019,2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
* GNU Mes is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or (at
* your option) any later version.
*
* GNU Mes is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/syscall.h>
#include <syscall.h>
#include <mes/lib.h>
#include <fcntl.h>
long
read (int filedes, void *buffer, long size)
{
long bytes = _sys_call3 (SYS_read, filedes, buffer, size);
return bytes;
}

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019,2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -23,7 +23,13 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#if __M2_PLANET__ || !(__MESC__ && __arm__) #if __MESC__ && __arm__
#define __MESC__and__arm__
#endif
// FIXME: M2-Planet 1.10.0 crashes on this...
// #if __M2__ || !(__MESC__ && __arm__)
#if __M2__ || !defined (__MESC__and__arm__)
size_t size_t
__mesabi_uldiv (size_t a, size_t b, size_t *remainder) __mesabi_uldiv (size_t a, size_t b, size_t *remainder)
{ {

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019,2020,2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2020,2021,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -23,8 +23,6 @@
#include <sys/types.h> #include <sys/types.h>
#include <mes/lib.h> #include <mes/lib.h>
char *__getcwd_buf;
char * char *
getcwd (char *buffer, size_t size) getcwd (char *buffer, size_t size)
{ {

View File

@ -1,6 +1,6 @@
/* /*
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019,2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -22,9 +22,6 @@
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
// CONSTANT M2_PTR_SIZE 4
#define M2_PTR_SIZE 1
char * char *
getenv (char const *s) getenv (char const *s)
{ {

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -29,6 +29,13 @@ _open2 (char const *file_name, int flags)
return _open3 (file_name, flags, mask); return _open3 (file_name, flags, mask);
} }
#if __M2__
int
open (char const *file_name, int flags, int mask)
{
return _open3 (file_name, flags, mask);
}
#else // !__M2__
int int
open (char const *file_name, int flags, ...) open (char const *file_name, int flags, ...)
{ {
@ -44,3 +51,4 @@ open (char const *file_name, int flags, ...)
else else
return _open2 (file_name, flags); return _open2 (file_name, flags);
} }
#endif // !__M2__

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019,2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -22,9 +22,6 @@
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
// CONSTANT M2_PTR_SIZE 4
#define M2_PTR_SIZE 1
int int
setenv (char const *s, char const *v, int overwrite_p) setenv (char const *s, char const *v, int overwrite_p)
{ {

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -20,12 +20,16 @@
#include <mes/lib.h> #include <mes/lib.h>
#if !__M2__
void (*__call_at_exit) (void); void (*__call_at_exit) (void);
#endif
void void
exit (int code) exit (int code)
{ {
#if !__M2__
if (__call_at_exit) if (__call_at_exit)
(*__call_at_exit) (); (*__call_at_exit) ();
#endif
_exit (code); _exit (code);
} }

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2019,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -19,11 +19,15 @@
*/ */
#include <mes/lib.h> #include <mes/lib.h>
#include <stdlib.h>
void _exit (int code); #include <string.h>
void void
exit (int code) __buffered_read_init (int filedes)
{
}
size_t
__buffered_read_clear (int filedes)
{ {
_exit (code);
} }

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -18,8 +18,6 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. * along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/ */
// CONSTANT SIGABRT 0
int int
__raise (int signum) __raise (int signum)
{ {

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -18,39 +18,62 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. * along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/ */
#if SYSTEM_LIBC #include <limits.h>
#error "SYSTEM_LIBC not supported" #include <stdio.h>
#endif #include <string.h>
#include <mes/lib.h> #include <mes/lib.h>
#include <stdio.h>
#include <stdlib.h>
int int
main (int argc, char *argv[]) main ()
{ {
int size = 5000; int i;
puts ("m!\n");
//int *p = 0; oputs ("\n");
char *p = 0;
p = malloc (size); oputs ("t: 1 % 2\n");
size = 5000; i = 1 % 2;
puts ("p="); if (i != 1)
puts (itoa (p)); return 1;
puts ("\n");
for (int i = 0; i < size; i++) oputs ("t: 2 % 4\n");
{ i = 2 % 4;
puts ("set "); if (i != 2)
puts (itoa (i)); return 2;
puts ("\n");
p[i] = i; oputs ("t: 3 % 4\n");
} i = 3 % 4;
for (int i = 0; i < size; i++) if (i != 3)
{ return 3;
puts (itoa (i));
puts (": "); oputs ("t: 1 % 256\n");
puts (itoa (p[i])); i = 1 % 256;
puts ("\n"); if (i != 1)
} return 4;
unsigned u;
oputs ("\n");
oputs ("t: 1U % 2\n");
u = 1 % 2;
if (u != 1)
return 5;
oputs ("t: 2U % 4\n");
u = 2 % 4;
if (u != 2)
return 6;
oputs ("t: 3U % 4\n");
u = 3 % 4;
if (u != 3)
return 7;
oputs ("t: 1U % 256\n");
u = 1 % 256;
if (u != 1)
return 8;
return 0; return 0;
} }

View File

@ -383,9 +383,9 @@
`(,(string-append "push___%" r0)) `(,(string-append "push___%" r0))
(armv4:call-label #f "__mesabi_imod" 2)) (armv4:call-label #f "__mesabi_imod" 2))
;; __mesabi_uldiv(a, b, remainderp) ;; __mesabi_uldiv(a, b, remainderp)
(append `(("push___%r0") ; slot for remainder (append `(("push___%r3") ; slot for remainder
("mov____%esp,%r0") ("mov____%esp,%r3")
("push___%r0") ; pointer to remainder ("push___%r3") ; pointer to remainder
(,(string-append "push___%" r1)) (,(string-append "push___%" r1))
(,(string-append "push___%" r0))) (,(string-append "push___%" r0)))
(armv4:call-label #f "__mesabi_uldiv" 3) (armv4:call-label #f "__mesabi_uldiv" 3)

View File

@ -24,15 +24,14 @@ mes_cpu=${mes_cpu:-x86}
stage0_cpu=${stage0_cpu:-x86} stage0_cpu=${stage0_cpu:-x86}
M2-Planet \ M2-Planet \
--bootstrap-mode \
--debug \ --debug \
--architecture ${stage0_cpu} \ --architecture ${stage0_cpu} \
-f include/m2/lib.h \ -f include/mes/lib-mini.h \
-f lib/linux/${mes_cpu}-mes-m2/crt1.c \ -f lib/linux/${mes_cpu}-mes-m2/crt1.c \
-f lib/linux/${mes_cpu}-mes-m2/_exit.c \ -f lib/linux/${mes_cpu}-mes-m2/_exit.c \
-f lib/linux/${mes_cpu}-mes-m2/_write.c \ -f lib/linux/${mes_cpu}-mes-m2/_write.c \
-f lib/string/strlen.c \ -f lib/string/strlen.c \
-f lib/mes/mini-write.c \ -f lib/mes/write.c \
-f lib/mes/eputs.c \ -f lib/mes/eputs.c \
-f lib/string/strcmp.c \ -f lib/string/strcmp.c \
-f scaffold/argv.c \ -f scaffold/argv.c \

View File

@ -30,7 +30,7 @@ M2-Planet \
-f lib/mes/globals.c \ -f lib/mes/globals.c \
-f lib/linux/${mes_cpu}-mes-m2/_exit.c \ -f lib/linux/${mes_cpu}-mes-m2/_exit.c \
-f lib/linux/${mes_cpu}-mes-m2/_write.c \ -f lib/linux/${mes_cpu}-mes-m2/_write.c \
-f lib/mes/mini-write.c \ -f lib/mes/write.c \
-f lib/string/strlen.c \ -f lib/string/strlen.c \
-f lib/string/strcpy.c \ -f lib/string/strcpy.c \
-f lib/mes/eputs.c \ -f lib/mes/eputs.c \

View File

@ -24,15 +24,14 @@ mes_cpu=${mes_cpu:-x86}
stage0_cpu=${stage0_cpu:-x86} stage0_cpu=${stage0_cpu:-x86}
M2-Planet \ M2-Planet \
--bootstrap-mode \
--debug \ --debug \
--architecture ${stage0_cpu} \ --architecture ${stage0_cpu} \
-f include/m2/lib.h \ -f include/mes/lib-mini.h \
-f lib/linux/${mes_cpu}-mes-m2/crt1.c \ -f lib/linux/${mes_cpu}-mes-m2/crt1.c \
-f lib/linux/${mes_cpu}-mes-m2/_exit.c \ -f lib/linux/${mes_cpu}-mes-m2/_exit.c \
-f lib/linux/${mes_cpu}-mes-m2/_write.c \ -f lib/linux/${mes_cpu}-mes-m2/_write.c \
-f lib/string/strlen.c \ -f lib/string/strlen.c \
-f lib/mes/mini-write.c \ -f lib/mes/write.c \
-f lib/mes/eputs.c \ -f lib/mes/eputs.c \
-f scaffold/hello.c \ -f scaffold/hello.c \
-o scaffold/hello.M1 -o scaffold/hello.M1

View File

@ -30,7 +30,7 @@ M2-Planet \
-f lib/mes/globals.c \ -f lib/mes/globals.c \
-f lib/linux/${mes_cpu}-mes-m2/_exit.c \ -f lib/linux/${mes_cpu}-mes-m2/_exit.c \
-f lib/linux/${mes_cpu}-mes-m2/_write.c \ -f lib/linux/${mes_cpu}-mes-m2/_write.c \
-f lib/mes/mini-write.c \ -f lib/mes/write.c \
-f lib/string/strlen.c \ -f lib/string/strlen.c \
-f lib/string/strcpy.c \ -f lib/string/strcpy.c \
-f lib/mes/eputs.c \ -f lib/mes/eputs.c \

View File

@ -30,7 +30,7 @@ M2-Planet \
-f lib/mes/globals.c \ -f lib/mes/globals.c \
-f lib/linux/${mes_cpu}-mes-m2/_exit.c \ -f lib/linux/${mes_cpu}-mes-m2/_exit.c \
-f lib/linux/${mes_cpu}-mes-m2/_write.c \ -f lib/linux/${mes_cpu}-mes-m2/_write.c \
-f lib/mes/mini-write.c \ -f lib/mes/write.c \
-f lib/string/strlen.c \ -f lib/string/strlen.c \
-f lib/string/strcpy.c \ -f lib/string/strcpy.c \
-f lib/mes/eputs.c \ -f lib/mes/eputs.c \

View File

@ -24,7 +24,6 @@ mes_cpu=${mes_cpu:-x86}
stage0_cpu=${stage0_cpu:-x86} stage0_cpu=${stage0_cpu:-x86}
M2-Planet \ M2-Planet \
--bootstrap-mode \
--debug \ --debug \
--architecture ${stage0_cpu} \ --architecture ${stage0_cpu} \
-f lib/linux/${mes_cpu}-mes-m2/crt1.c \ -f lib/linux/${mes_cpu}-mes-m2/crt1.c \

View File

@ -24,28 +24,29 @@ mes_cpu=${mes_cpu:-x86}
stage0_cpu=${stage0_cpu:-x86} stage0_cpu=${stage0_cpu:-x86}
M2-Planet \ M2-Planet \
--bootstrap-mode \
--debug \ --debug \
--architecture ${stage0_cpu} \ --architecture ${stage0_cpu} \
-f include/m2/lib.h \
-f lib/linux/${mes_cpu}-mes-m2/crt1.c \ -f lib/linux/${mes_cpu}-mes-m2/crt1.c \
-f lib/linux/${mes_cpu}-mes-m2/_exit.c \ -f include/mes/lib-mini.h \
-f lib/linux/${mes_cpu}-mes-m2/_write.c \ -f lib/linux/${mes_cpu}-mes-m2/_write.c \
-f lib/linux/${mes_cpu}-mes-m2/syscall.c \ -f lib/linux/${mes_cpu}-mes-m2/_exit.c \
-f include/linux/${mes_cpu}/syscall.h \ -f include/linux/${mes_cpu}/syscall.h \
-f lib/linux/${mes_cpu}-mes-m2/syscall.c \
-f lib/m2/cast.c \ -f lib/m2/cast.c \
-f include/mes/lib.h \
-f lib/string/strlen.c \ -f lib/string/strlen.c \
-f lib/mes/mini-write.c \ -f lib/mes/write.c \
-f lib/mes/eputs.c \ -f lib/mes/eputs.c \
-f lib/linux/brk.c \ -f lib/linux/brk.c \
-f lib/m2/malloc.c \ -f lib/linux/malloc.c \
-f lib/string/memset.c \ -f lib/string/memset.c \
-f lib/m2/read.c \ -f lib/linux/read.c \
-f lib/mes/fdgetc.c \ -f lib/mes/fdgetc.c \
-f lib/stdio/getchar.c \ -f lib/stdio/getchar.c \
-f lib/stdio/putchar.c \ -f lib/stdio/putchar.c \
-f lib/m2/open.c \ -f lib/linux/open.c \
-f lib/m2/mes_open.c \ -f include/sys/types.h \
-f include/stdio.h \
-f scaffold/read.c \ -f scaffold/read.c \
-o scaffold/read.M1 -o scaffold/read.M1

View File

@ -1,6 +1,6 @@
# GNU Mes --- Maxwell Equations of Software # GNU Mes --- Maxwell Equations of Software
# Copyright © 2019 Jeremiah Orians <jeremiah@pdp10.guru> # Copyright © 2019 Jeremiah Orians <jeremiah@pdp10.guru>
# Copyright © 2018,2019,2020,2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> # Copyright © 2018,2019,2020,2021,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
# #
# This file is part of GNU Mes. # This file is part of GNU Mes.
# #
@ -76,20 +76,26 @@ M2_SOURCES = \
lib/linux/x86-mes-m2/crt1.c \ lib/linux/x86-mes-m2/crt1.c \
lib/linux/x86-mes-m2/_exit.c \ lib/linux/x86-mes-m2/_exit.c \
lib/linux/x86-mes-m2/_write.c \ lib/linux/x86-mes-m2/_write.c \
lib/mes/globals.c \
lib/m2/cast.c \ lib/m2/cast.c \
lib/m2/exit.c \ lib/stdlib/exit.c \
lib/mes/write.c \ lib/stub/__buffered_read.c \
lib/linux/x86-mes-m2/syscall.c \ lib/linux/x86-mes-m2/syscall.c \
lib/stub/__raise.c \
lib/linux/brk.c \ lib/linux/brk.c \
lib/stdlib/malloc.c \ lib/linux/malloc.c \
lib/string/memset.c \ lib/string/memset.c \
\ lib/linux/read.c \
lib/m2/read.c \
lib/mes/fdgetc.c \ lib/mes/fdgetc.c \
lib/linux/lseek.c \
lib/posix/write.c \
\
lib/stdio/getchar.c \ lib/stdio/getchar.c \
lib/stdio/putchar.c \ lib/stdio/putchar.c \
lib/m2/open.c \ lib/stub/__buffered_read.c \
lib/m2/mes_open.c \ lib/linux/_open3.c \
lib/linux/open.c \
lib/mes/mes_open.c \
lib/string/strlen.c \ lib/string/strlen.c \
lib/mes/eputs.c \ lib/mes/eputs.c \
lib/mes/fdputc.c \ lib/mes/fdputc.c \
@ -118,15 +124,16 @@ M2_SOURCES = \
lib/mes/fdungetc.c \ lib/mes/fdungetc.c \
lib/posix/setenv.c \ lib/posix/setenv.c \
lib/linux/access.c \ lib/linux/access.c \
lib/m2/chmod.c \ lib/linux/chmod.c \
lib/linux/ioctl3.c \ lib/linux/ioctl3.c \
lib/m2/isatty.c \ lib/m2/isatty.c \
lib/linux/fork.c \ lib/linux/fork.c \
lib/m2/execve.c \ lib/m2/execve.c \
lib/m2/execv.c \ lib/m2/execv.c \
lib/m2/waitpid.c \ lib/linux/wait4.c \
lib/linux/waitpid.c \
lib/linux/gettimeofday.c \ lib/linux/gettimeofday.c \
lib/m2/clock_gettime.c \ lib/linux/clock_gettime.c \
lib/m2/time.c \ lib/m2/time.c \
lib/linux/_getcwd.c \ lib/linux/_getcwd.c \
lib/m2/getcwd.c \ lib/m2/getcwd.c \
@ -137,12 +144,6 @@ M2_SOURCES = \
lib/linux/unlink.c \ lib/linux/unlink.c \
src/m2.c src/m2.c
M2_TODO = \
lib/m2/file_print.c \
lib/mes/ntoab.c \
lib/mes/fdgetc.c \
lib/mes/fdungetc.c
INCLUDES = \ INCLUDES = \
include/mes/builtins.h \ include/mes/builtins.h \
include/mes/constants.h \ include/mes/constants.h \
@ -186,8 +187,19 @@ bin/gc-gcc: simple.make $(GCC_SOURCES) $(TEST_GC_SOURCES) $(INCLUDES) | bin
$(CC) $(CFLAGS) -D GC_TEST=1 $(GCC_SOURCES) $(TEST_GC_SOURCES) -o $@ $(CC) $(CFLAGS) -D GC_TEST=1 $(GCC_SOURCES) $(TEST_GC_SOURCES) -o $@
M2_PLANET_INCLUDES = \ M2_PLANET_INCLUDES = \
include/m2/lib.h \ include/mes/config.h \
include/mes/lib-mini.h \
include/mes/lib.h \
include/linux/x86/syscall.h \ include/linux/x86/syscall.h \
include/time.h \
include/sys/time.h \
include/sys/types.h \
include/stdio.h \
include/limits.h \
include/sys/resource.h \
include/sys/stat.h \
include/fcntl.h \
include/signal.h \
include/mes/mes.h \ include/mes/mes.h \
include/mes/builtins.h \ include/mes/builtins.h \
include/mes/constants.h \ include/mes/constants.h \
@ -216,12 +228,12 @@ m2/mes-m2.hex2: m2/mes-m2.blood-elf.M1
-o $@ -o $@
bin/mes-m2: m2/mes-m2.hex2 bin/mes-m2: m2/mes-m2.hex2
hex2 \ hex2 \
--architecture $(M2_PLANET_ARCH) \ --architecture $(M2_PLANET_ARCH) \
--little-endian \ --little-endian \
--base-address 0x1000000 \ --base-address 0x1000000 \
-f lib/x86-mes/elf32-header.hex2 \ -f lib/linux/x86-mes/elf32-header.hex2 \
-f m2/mes-m2.hex2 \ -f m2/mes-m2.hex2 \
-o $@ -o $@
cp -f $@ bin/mes cp -f $@ bin/mes

315
simple.sh
View File

@ -36,47 +36,48 @@ cat > include/mes/config.h <<EOF
EOF EOF
## Build ## ## Build ##
gcc -g -D HAVE_CONFIG_H=1 -I include\ gcc -g -D HAVE_CONFIG_H=1 -I include \
-o out-system-libc/mes\ -o out-system-libc/mes \
\ \
lib/mes/eputs.c\ lib/mes/eputs.c \
lib/mes/oputs.c\ lib/mes/oputs.c \
\ \
lib/mes/cast.c\ lib/mes/cast.c \
lib/mes/itoa.c\ lib/mes/itoa.c \
lib/mes/ltoa.c\ lib/mes/ltoa.c \
lib/mes/ltoab.c\ lib/mes/ltoab.c \
lib/mes/ultoa.c\ lib/mes/ultoa.c \
lib/mes/utoa.c\ lib/mes/utoa.c \
lib/mes/eputc.c\ lib/mes/eputc.c \
lib/mes/fdgetc.c\ lib/mes/fdgetc.c \
lib/mes/fdputc.c\ lib/mes/fdputc.c \
lib/mes/fdputs.c\ lib/mes/fdputs.c \
lib/mes/fdungetc.c\ lib/mes/fdungetc.c \
lib/mes/mes_open.c\ lib/mes/mes_open.c \
lib/mes/ntoab.c\ lib/mes/ntoab.c \
lib/mes/oputc.c\ lib/mes/oputc.c \
\ \
lib/mes/__assert_fail.c\ lib/mes/__assert_fail.c \
lib/mes/assert_msg.c\ lib/mes/assert_msg.c \
\ \
src/builtins.c\ src/builtins.c \
src/cc.c\ src/cc.c \
src/core.c\ src/core.c \
src/display.c\ src/display.c \
src/eval-apply.c\ src/eval-apply.c \
src/gc.c\ src/gc.c \
src/hash.c\ src/globals.c \
src/lib.c\ src/hash.c \
src/math.c\ src/lib.c \
src/mes.c\ src/math.c \
src/module.c\ src/mes.c \
src/posix.c\ src/module.c \
src/reader.c\ src/posix.c \
src/stack.c\ src/reader.c \
src/string.c\ src/stack.c \
src/struct.c\ src/string.c \
src/symbol.c\ src/struct.c \
src/symbol.c \
src/vector.c src/vector.c
## Check ## ## Check ##
@ -106,7 +107,7 @@ MES_DEBUG=3 MES_ARENA=10000 MES_MAX_ARENA=10000 MES_BOOT=tests/gc.test out-syste
# lib/linux/$mes_cpu-mes-mescc/_write.c\ # lib/linux/$mes_cpu-mes-mescc/_write.c\
# \ # \
# lib/mes/globals.c\ # lib/mes/globals.c\
# lib/mes/mini-write.c\ # lib/mes/write.c\
# lib/string/strlen.c\ # lib/string/strlen.c\
# \ # \
# scaffold/hello.c # scaffold/hello.c
@ -120,7 +121,7 @@ cat \
lib/linux/$mes_cpu-mes-mescc/_write.c \ lib/linux/$mes_cpu-mes-mescc/_write.c \
\ \
lib/mes/globals.c \ lib/mes/globals.c \
lib/mes/mini-write.c \ lib/mes/write.c \
lib/string/strlen.c \ lib/string/strlen.c \
\ \
scaffold/hello.c \ scaffold/hello.c \
@ -164,115 +165,121 @@ EOF
## Build ## ## Build ##
compiler=gcc # not configurable compiler=gcc # not configurable
$CC -g -D HAVE_CONFIG_H=1 -I include -I include/$mes_kernel/$mes_cpu\ $CC -g -D HAVE_CONFIG_H=1 \
-nostdinc -nostdlib -fno-builtin -fno-stack-protector\ -I include -I include/$mes_kernel/$mes_cpu \
-o out-mes/mes\ -nostdinc -nostdlib \
\ -fno-builtin -fno-stack-protector \
lib/linux/$mes_cpu-mes-gcc/crt1.c\ -o out-mes/mes \
\ \
lib/mes/globals.c\ lib/linux/$mes_cpu-mes-gcc/crt1.c \
lib/mes/eputs.c\ \
lib/mes/oputs.c\ lib/mes/globals.c \
\ lib/mes/eputs.c \
lib/posix/write.c\ lib/mes/oputs.c \
lib/string/strlen.c\ \
lib/stdlib/puts.c\ lib/posix/write.c \
lib/stdlib/exit.c\ lib/string/strlen.c \
lib/$mes_kernel/$mes_cpu-mes-$compiler/_exit.c\ lib/stdlib/puts.c \
lib/$mes_kernel/$mes_cpu-mes-$compiler/_write.c\ lib/stdlib/exit.c \
\ lib/$mes_kernel/$mes_cpu-mes-$compiler/_exit.c \
lib/mes/cast.c\ lib/$mes_kernel/$mes_cpu-mes-$compiler/_write.c \
lib/mes/itoa.c\ \
lib/mes/ltoa.c\ lib/mes/cast.c \
lib/mes/ltoab.c\ lib/mes/itoa.c \
lib/mes/ultoa.c\ lib/mes/ltoa.c \
lib/mes/utoa.c\ lib/mes/ltoab.c \
lib/mes/eputc.c\ lib/mes/ultoa.c \
lib/mes/fdgetc.c\ lib/mes/utoa.c \
lib/mes/fdputc.c\ lib/mes/eputc.c \
lib/mes/fdputs.c\ lib/mes/fdgetc.c \
lib/mes/fdungetc.c\ lib/mes/fdputc.c \
lib/mes/mes_open.c\ lib/mes/fdputs.c \
lib/mes/ntoab.c\ lib/mes/fdungetc.c \
lib/mes/oputc.c\ lib/mes/mes_open.c \
\ lib/mes/ntoab.c \
lib/stdlib/atoi.c\ lib/mes/oputc.c \
lib/mes/abtol.c\ \
lib/ctype/isdigit.c\ lib/stdlib/atoi.c \
lib/ctype/isnumber.c\ lib/mes/abtol.c \
lib/ctype/isspace.c\ lib/ctype/isdigit.c \
lib/ctype/isxdigit.c\ lib/ctype/isnumber.c \
\ lib/ctype/isspace.c \
lib/mes/__assert_fail.c\ lib/ctype/isxdigit.c \
lib/mes/assert_msg.c\ \
lib/mes/__buffered_read.c\ lib/stub/__raise.c \
lib/mes/__mes_debug.c\ lib/mes/__assert_fail.c \
lib/posix/execv.c\ lib/mes/assert_msg.c \
lib/posix/getcwd.c\ lib/mes/__buffered_read.c \
lib/posix/getenv.c\ lib/mes/__mes_debug.c \
lib/posix/isatty.c\ lib/posix/execv.c \
lib/posix/open.c\ lib/posix/getcwd.c \
lib/posix/setenv.c\ lib/posix/getenv.c \
lib/posix/wait.c\ lib/posix/isatty.c \
lib/stdio/fgetc.c\ lib/posix/open.c \
lib/stdio/fputc.c\ lib/posix/setenv.c \
lib/stdio/fputs.c\ lib/posix/wait.c \
lib/stdio/getc.c\ lib/stdio/fgetc.c \
lib/stdio/getchar.c\ lib/stdio/fputc.c \
lib/stdio/putc.c\ lib/stdio/fputs.c \
lib/stdio/putchar.c\ lib/stdio/getc.c \
lib/stdio/ungetc.c\ lib/stdio/getchar.c \
lib/stdlib/free.c\ lib/stdio/putc.c \
lib/stdlib/malloc.c\ lib/stdio/putchar.c \
lib/stdlib/realloc.c\ lib/stdio/ungetc.c \
lib/string/memchr.c\ lib/stdlib/free.c \
lib/string/memcmp.c\ lib/linux/malloc.c \
lib/string/memcpy.c\ lib/stdlib/realloc.c \
lib/string/memmove.c\ lib/string/memchr.c \
lib/string/memset.c\ lib/string/memcmp.c \
lib/string/strcmp.c\ lib/string/memcpy.c \
lib/string/strcpy.c\ lib/string/memmove.c \
lib/string/strncmp.c\ lib/string/memset.c \
\ lib/string/strcmp.c \
lib/linux/lseek.c\ lib/string/strcpy.c \
\ lib/string/strncmp.c \
lib/linux/access.c\ \
lib/linux/brk.c\ lib/linux/lseek.c \
lib/linux/chmod.c\ \
lib/linux/clock_gettime.c\ lib/linux/access.c \
lib/linux/dup.c\ lib/linux/brk.c \
lib/linux/dup2.c\ lib/linux/chmod.c \
lib/linux/execve.c\ lib/linux/clock_gettime.c \
lib/linux/fork.c\ lib/linux/dup.c \
lib/linux/fsync.c\ lib/linux/dup2.c \
lib/linux/_getcwd.c\ lib/linux/execve.c \
lib/linux/gettimeofday.c\ lib/linux/fork.c \
lib/linux/ioctl3.c\ lib/linux/fsync.c \
lib/linux/_open3.c\ lib/linux/_getcwd.c \
lib/linux/read.c\ lib/linux/gettimeofday.c \
lib/linux/_read.c\ lib/linux/ioctl3.c \
lib/linux/time.c\ lib/linux/_open3.c \
lib/linux/unlink.c\ lib/linux/read.c \
lib/linux/waitpid.c\ lib/linux/_read.c \
lib/linux/$mes_cpu-mes-$compiler/syscall.c\ lib/linux/time.c \
\ lib/linux/unlink.c \
src/builtins.c\ include/sys/resource.h \
src/cc.c\ lib/linux/wait4.c \
src/core.c\ lib/linux/waitpid.c \
src/display.c\ lib/linux/$mes_cpu-mes-$compiler/syscall.c \
src/eval-apply.c\ \
src/gc.c\ src/builtins.c \
src/hash.c\ src/cc.c \
src/lib.c\ src/core.c \
src/math.c\ src/display.c \
src/mes.c\ src/eval-apply.c \
src/module.c\ src/gc.c \
src/posix.c\ src/globals.c \
src/reader.c\ src/hash.c \
src/stack.c\ src/lib.c \
src/string.c\ src/math.c \
src/struct.c\ src/mes.c \
src/symbol.c\ src/module.c \
src/posix.c \
src/reader.c \
src/stack.c \
src/string.c \
src/struct.c \
src/symbol.c \
src/vector.c src/vector.c
## Check ## ## Check ##
@ -302,7 +309,7 @@ MES_DEBUG=3 MES_ARENA=10000 MES_MAX_ARENA=10000 MES_BOOT=tests/gc.test out-mes/m
# lib/linux/$mes_cpu-mes-mescc/_write.c\ # lib/linux/$mes_cpu-mes-mescc/_write.c\
# \ # \
# lib/mes/globals.c\ # lib/mes/globals.c\
# lib/mes/mini-write.c\ # lib/mes/write.c\
# lib/string/strlen.c\ # lib/string/strlen.c\
# \ # \
# scaffold/hello.c # scaffold/hello.c
@ -316,7 +323,7 @@ cat \
lib/linux/$mes_cpu-mes-mescc/_write.c \ lib/linux/$mes_cpu-mes-mescc/_write.c \
\ \
lib/mes/globals.c \ lib/mes/globals.c \
lib/mes/mini-write.c \ lib/mes/write.c \
lib/string/strlen.c \ lib/string/strlen.c \
\ \
scaffold/hello.c \ scaffold/hello.c \

View File

@ -148,7 +148,7 @@ length (struct scm *x)
struct scm * struct scm *
error (struct scm *key, struct scm *x) error (struct scm *key, struct scm *x)
{ {
#if !__MESC_MES__ && !__M2_PLANET__ #if !__MESC_MES__ && !__M2__
struct scm *throw = module_ref (R0, cell_symbol_throw); struct scm *throw = module_ref (R0, cell_symbol_throw);
if (throw != cell_undefined) if (throw != cell_undefined)
return apply (throw, cons (key, cons (x, cell_nil)), R0); return apply (throw, cons (key, cons (x, cell_nil)), R0);

View File

@ -1,6 +1,7 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019,2020,2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2020,2021,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2022 Gabriel Wicki <gabriel@erlikon.ch>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -30,9 +31,6 @@
int g_dump_filedes; int g_dump_filedes;
#define M2_CELL_SIZE 1U
// CONSTANT M2_CELL_SIZE 12
char * char *
cell_bytes (struct scm *x) cell_bytes (struct scm *x)
{ {
@ -40,16 +38,20 @@ cell_bytes (struct scm *x)
return p + (2 * sizeof (long)); return p + (2 * sizeof (long));
} }
#if __M2__
#define U10 10
#define U100 100
#else
#define U10 10U #define U10 10U
// CONSTANT U10 10
#define U100 100U #define U100 100U
// CONSTANT U100 100 #endif
void void
gc_init () gc_init ()
{ {
#if SYSTEM_LIBC #if SYSTEM_LIBC
ARENA_SIZE = 100000000; /* 2.3GiB */ ARENA_SIZE = 100000000; /* 2.3GiB */
#elif ! __M2_PLANET__ #elif ! __M2__
ARENA_SIZE = 300000; /* 32b: 3MiB, 64b: 6 MiB */ ARENA_SIZE = 300000; /* 32b: 3MiB, 64b: 6 MiB */
#else #else
ARENA_SIZE = 20000000; ARENA_SIZE = 20000000;
@ -326,11 +328,11 @@ void
gc_up_arena () gc_up_arena ()
{ {
long old_arena_bytes = (ARENA_SIZE + JAM_SIZE) * sizeof (struct scm); long old_arena_bytes = (ARENA_SIZE + JAM_SIZE) * sizeof (struct scm);
if (ARENA_SIZE >> 1 < MAX_ARENA_SIZE >> 2) if (ARENA_SIZE / 2 < MAX_ARENA_SIZE / 4)
{ {
ARENA_SIZE = ARENA_SIZE << 1; ARENA_SIZE = ARENA_SIZE * 2;
JAM_SIZE = JAM_SIZE << 1; JAM_SIZE = JAM_SIZE * 2;
GC_SAFETY = GC_SAFETY << 1; GC_SAFETY = GC_SAFETY * 2;
} }
else else
ARENA_SIZE = MAX_ARENA_SIZE - JAM_SIZE; ARENA_SIZE = MAX_ARENA_SIZE - JAM_SIZE;
@ -448,7 +450,7 @@ void
gc_flip () gc_flip ()
{ {
if (g_free - g_news > JAM_SIZE) if (g_free - g_news > JAM_SIZE)
JAM_SIZE = (g_free - g_news) + ((g_free - g_news) / 2); JAM_SIZE = ((g_free - g_news) * 3) / 2;
cell_arena = g_cells - M2_CELL_SIZE; /* For debugging. */ cell_arena = g_cells - M2_CELL_SIZE; /* For debugging. */
gc_cellcpy (g_cells, g_news, (g_free - g_news) / M2_CELL_SIZE); gc_cellcpy (g_cells, g_news, (g_free - g_news) / M2_CELL_SIZE);

View File

@ -37,6 +37,12 @@ assert_number (char const *name, struct scm *x)
} }
} }
#define CAR(x) x->car
#define CDR(x) x->cdr
#define VALUE(x) x->value
#define TYPE(x) x->type
#define MAKE_NUMBER(x) make_number (x)
struct scm * struct scm *
greater_p (struct scm *x) /*:((name . ">") (arity . n)) */ greater_p (struct scm *x) /*:((name . ">") (arity . n)) */
{ {
@ -143,7 +149,31 @@ plus (struct scm *x) /*:((name . "+") (arity . n)) */
} }
struct scm * struct scm *
divide (struct scm *x) /*:((name . "/") (arity . n)) */ divide_023 (struct scm *x) /*:((name . "/") (arity . n)) */
{
long n = 1;
if (x != cell_nil)
{
assert_number ("divide", CAR (x));
n = VALUE (car (x));
x = cdr (x);
}
while (x != cell_nil)
{
assert_number ("divide", CAR (x));
long y = VALUE (CAR (x));
if (y == 0)
error (cstring_to_symbol ("divide-by-zero"), x);
if (!n)
break;
n /= y;
x = cdr (x);
}
return MAKE_NUMBER (n);
}
struct scm *
divide_024 (struct scm *x) /*:((name . "/") (arity . n)) */
{ {
long n = 1; long n = 1;
struct scm *i; struct scm *i;
@ -186,7 +216,38 @@ divide (struct scm *x) /*:((name . "/") (arity . n)) */
} }
struct scm * struct scm *
modulo (struct scm *a, struct scm *b) divide (struct scm *a)
{
struct scm* r23 = divide_023 (a);
struct scm* r24 = divide_024 (a);
if (r23->value != r24->value)
{
eputs ("divide!\n");
eputs ("a="); eputs (itoa (a->car->value)); eputs (",");
eputs ("b="); eputs (itoa (a->cdr->car->value)); eputs ("\n");
eputs ("23="); eputs (itoa (r23->value)); eputs ("\n");
eputs ("24="); eputs (itoa (r24->value)); eputs ("\n");
}
return r24;
}
struct scm *
modulo_023 (struct scm *a, struct scm *b)
{
assert_number ("modulo", a);
assert_number ("modulo", b);
long x = VALUE (a);
long y = VALUE (b);
if (y == 0)
error (cstring_to_symbol ("divide-by-zero"), a);
while (x < 0)
x += y;
x = x ? x % y : 0;
return MAKE_NUMBER (x);
}
struct scm *
modulo_024 (struct scm *a, struct scm *b)
{ {
assert_number ("modulo", a); assert_number ("modulo", a);
assert_number ("modulo", b); assert_number ("modulo", b);
@ -204,14 +265,38 @@ modulo (struct scm *a, struct scm *b)
while (n < 0) while (n < 0)
n = n + w; n = n + w;
size_t u = n; size_t u = n;
#if 0
if (u != 0) if (u != 0)
u = u % w; u = u % w;
n = u; n = u;
#elif 0
if (n != 0)
n = n % w;
#else
if (u != 0)
n = u % w;
#endif
if (sign_p) if (sign_p)
n = -n; n = -n;
return make_number (n); return make_number (n);
} }
struct scm *
modulo (struct scm *a, struct scm *b)
{
struct scm* r23 = modulo_023 (a, b);
struct scm* r24 = modulo_024 (a, b);
if (r23->value != r24->value)
{
eputs ("modulo!\n");
eputs ("a="); eputs (itoa (a->value)); eputs (",");
eputs ("b="); eputs (itoa (b->value)); eputs ("\n");
eputs ("23="); eputs (itoa (r23->value)); eputs ("\n");
eputs ("24="); eputs (itoa (r24->value)); eputs ("\n");
}
return r24;
}
struct scm * struct scm *
multiply (struct scm *x) /*:((name . "*") (arity . n)) */ multiply (struct scm *x) /*:((name . "*") (arity . n)) */
{ {

View File

@ -35,7 +35,7 @@
#include <unistd.h> #include <unistd.h>
#if SYSTEM_LIBC #if SYSTEM_LIBC
#define __raise(x) -1 //#define __raise(x) -1
#endif #endif
struct scm * struct scm *
@ -377,13 +377,14 @@ waitpid_ (struct scm *pid, struct scm *options)
return cons (make_number (child), make_number (status)); return cons (make_number (child), make_number (status));
} }
#if __x86_64__ #if __M2__
/* Milliseconds for everyone else. */
#define TIME_UNITS_PER_SECOND 1000
#elif __x86_64__
/* Nanoseconds on 64-bit systems with POSIX timers. */ /* Nanoseconds on 64-bit systems with POSIX timers. */
// CONSTANT TIME_UNITS_PER_SECOND 1000000000
#define TIME_UNITS_PER_SECOND 1000000000U #define TIME_UNITS_PER_SECOND 1000000000U
#else #else
/* Milliseconds for everyone else. */ /* Milliseconds for everyone else. */
// CONSTANT TIME_UNITS_PER_SECOND 1000
#define TIME_UNITS_PER_SECOND 1000U #define TIME_UNITS_PER_SECOND 1000U
#endif #endif
@ -408,8 +409,12 @@ gettimeofday_ () /*:((name . "gettimeofday")) */
return cons (make_number (time->tv_sec), make_number (time->tv_usec)); return cons (make_number (time->tv_sec), make_number (time->tv_usec));
} }
#if __M2__
#define UL1000000000 1000000000
#else
#define UL1000000000 1000000000UL #define UL1000000000 1000000000UL
// CONSTANT UL1000000000 1000000000 #endif
long long
seconds_and_nanoseconds_to_long (long s, long ns) seconds_and_nanoseconds_to_long (long s, long ns)
{ {

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019,2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -23,16 +23,6 @@
#include <string.h> #include <string.h>
// char const *MES_VERSION = "0.23";
#if __M2_PLANET__
#define M2_CELL_SIZE 12
// CONSTANT M2_CELL_SIZE 12
#else
#define M2_CELL_SIZE 1
// CONSTANT M2_CELL_SIZE 12
#endif
struct scm * struct scm *
init_symbol (struct scm *x, long type, char const *name) init_symbol (struct scm *x, long type, char const *name)
{ {

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2019,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -24,9 +24,6 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#define M2_CELL_SIZE 1
// CONSTANT M2_CELL_SIZE 12
int g_debug; int g_debug;
void void

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*- /* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software * GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019,2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> * Copyright © 2016,2017,2018,2019,2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* *
* This file is part of GNU Mes. * This file is part of GNU Mes.
* *
@ -21,14 +21,6 @@
#include "mes/lib.h" #include "mes/lib.h"
#include "mes/mes.h" #include "mes/mes.h"
#if __M2_PLANET__
#define M2_CELL_SIZE 12
// CONSTANT M2_CELL_SIZE 12
#else
#define M2_CELL_SIZE 1
// CONSTANT M2_CELL_SIZE 12
#endif
struct scm * struct scm *
make_vector_ (long k, struct scm *e) make_vector_ (long k, struct scm *e)
{ {