Compare commits

...

32 Commits

Author SHA1 Message Date
Andrius Štikonas b397e25c41 DRAFT Fix a typo in the comment.
* src/gc.c
2023-05-01 10:41:54 +02:00
Andrius Štikonas a20b790b49 DRAFT Fix x86_64 M2 elf header to work with debug info.
* lib/m2/x86_64/ELF-x86_64.hex2
2023-05-01 10:41:52 +02:00
Andrius Štikonas 44e265650e DRAFT Pass --64 to blood_elf on 64-bit arches.
* kaem.run
2023-05-01 10:41:50 +02:00
Janneke Nieuwenhuizen 2b6c88dc50 Revert "squash! EOF"
This reverts commit afd74c3fae.
2023-05-01 10:35:51 +02:00
Janneke Nieuwenhuizen afd74c3fae squash! EOF 2023-05-01 10:35:08 +02:00
Janneke Nieuwenhuizen 5663a79ec5 Revert "REMOVEME Revert kaem build for x86_64 -- segfaults"
This reverts commit 6a2d5bf80314fb17d5a6c06f14f46f74cc339a6f.
2023-05-01 10:35:08 +02:00
Janneke Nieuwenhuizen 6b145b99c2 REMOVEME x86_64 M2-Planet bug: scaffold/bug.c scaffold/bug.kaem
M2-Planet-0.10.0

This works fine, prints three times 33

    mes_cpu=x86 stage0_cpu=x86 kaem -f scaffold/bug.kaem

Only ntoab_local works, prints 33 only once,
segfaults in ntoab_global and ntoab

    mes_cpu=x86_64 stage0_cpu=amd64 kaem -f scaffold/bug.kaem

* scaffold/bug.c,
scaffold/bug.kaem: New files.
2023-05-01 10:35:08 +02:00
Janneke Nieuwenhuizen b00778b708 DRAFT m2: Add new style x86_64 defines to support M2-Planet 1.11.0.
* lib/m2/x86_64/x86_64_defs.M1: Add new M1 defines.
2023-05-01 10:35:08 +02:00
Janneke Nieuwenhuizen 12b3854d87 REMOVEME Revert kaem build for x86_64 -- segfaults 2023-05-01 10:35:08 +02:00
Janneke Nieuwenhuizen 13fe0b762a squash! x64 2023-05-01 10:35:08 +02:00
Jan (janneke) Nieuwenhuizen ef2a43d96e squash! DRAFT x86_64: build: Cater for M2-Planet. 2023-05-01 10:35:08 +02:00
Jan (janneke) Nieuwenhuizen 87471ffeef XXX DRAFT x86_64: build: Cater for M2-Planet.
What about
-    -f include/m2/lib.h                         \

XXX scaffold tests run,
  * MES_DEBUG=3 bin/mes-m2 segfaults in gc_init.

* kaem.run: Define __<cpu>__.
* kaem.x86_64,
lib/linux/x86_64-mes-m2/_exit.c,
lib/linux/x86_64-mes-m2/_write.c,
lib/linux/x86_64-mes-m2/crt1.M1,
lib/linux/x86_64-mes-m2/crt1.c,
lib/linux/x86_64-mes-m2/syscall.c,
lib/m2/x86_64/ELF-x86_64.hex2,
lib/m2/x86_64/x86_64_defs.M1: New files.
* build-aux/build.sh.in: Also allow kaem build for X86_64.
* include/mes/lib-mini.h[__M2__ && __x86_64__](M2_PTR_SIZE): Define as
8.
* include/mes/mes.h[__M2__ && __x86_64__](M2_CELL_SIZE): Define as 24.
* lib/x86_64-mes/x86_64.M1 (add____$i8,%rbp, mov____%rdi,%rbp): New
defines.
2023-05-01 10:35:08 +02:00
Janneke Nieuwenhuizen 311fe800f7 squash! fixup read.kaem EOF? 2023-05-01 10:35:08 +02:00
Janneke Nieuwenhuizen 47a261dcf8 squash! kaem.run: Remove --bootstrap-mode. 2023-05-01 10:34:26 +02:00
Janneke Nieuwenhuizen 6ddf5b17de squash! kaem.run: Remove --bootstrap-mode.
* include/mes/cc.h (__raise): ...here.

* include/sys/types.h (EOF): Move to...
* include/mes/cc.h (EOF): ...here, and...
* include/m2/types.h (EOF): ...here, to avoid M2-Planet crash.
2023-04-30 12:27:49 +02:00
Andrius Štikonas aaf9d178d4 m2: Add new style x86 defines to support M2-Planet 1.11.0.
* lib/m2/x86/x86_defs.M1: Add new M1 defines.
2023-04-30 10:45:16 +02:00
Jan (janneke) Nieuwenhuizen 3f62afe465 DRAFT lib: __assert_fail: Remove M2-Planet workarounds.
* lib/mes/__assert_fail.c (__assert_fail): Use *file, *function.
2023-04-30 10:45:16 +02:00
Jan (janneke) Nieuwenhuizen 975c87941b DRAFT 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.
2023-04-30 10:41:08 +02:00
Jan (janneke) Nieuwenhuizen e6f875a2c6 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.
2023-04-30 10:41:08 +02:00
Jan (janneke) Nieuwenhuizen e1fa9f4959 kaem: Add kaem.arm and kaem.x86.
* kaem.arm,
kaem.x86: New files.
2023-04-30 10:41:08 +02:00
Jan (janneke) Nieuwenhuizen f5b96067be kaem.run: Remove --bootstrap-mode.
* include/linux/arm/syscall.h,
include/linux/x86/syscall.h,
include/mes/constants.h: Remove CONSTANTs.
* include/sys/types.h (EOF): Change to 0xffffffff,
resp. 0xffffffffffffffff to avoid M2-Planet crash.
* 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 (_leek, lseek): Suport M2-Planet.
* lib/linux/_open3.c (_open3): Fix cast.
* 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/symbol.c: Likewise.
* src/vector.c: Likewise.
* src/posix.c: Likewise.
(__raise): Move to...
* include/mes/lib-system.h: ...this new file to avoid M2-Planet crash.
* 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.
2023-04-30 10:39:03 +02:00
Jan (janneke) Nieuwenhuizen c37faea559 lib: posix/open: Support M2-Planet.
* lib/posix/open.c (open)[__M2__]: New function.
2023-02-13 13:27:51 +01:00
Jan (janneke) Nieuwenhuizen a3cf7781e2 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.
2023-02-13 13:27:51 +01:00
Jan (janneke) Nieuwenhuizen 94ceb07b70 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.
2023-02-13 13:27:51 +01:00
Jan (janneke) Nieuwenhuizen 350feb72bb 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.
2023-02-13 13:27:51 +01:00
Jan (janneke) Nieuwenhuizen ba01443492 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.
2023-02-13 13:27:51 +01:00
Jan (janneke) Nieuwenhuizen ee664ba643 kaem: main: Remove --bootstrap-mode.
* scaffold/main.kaem: Remove --bootstrap-mode from M2-Planet call.
2023-02-13 13:27:51 +01:00
Jan (janneke) Nieuwenhuizen 5abda859d9 guix: m2-planet: Update to 1.10.0.
* guix/git/mes.scm (m2-planet): Update to 1.10.0.
2023-02-13 13:27:51 +01:00
Jan (janneke) Nieuwenhuizen 813e36a6f5 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.
2023-02-13 13:27:47 +01:00
Jan (janneke) Nieuwenhuizen d68fd5574a 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.
2023-02-13 13:26:15 +01:00
Jan (janneke) Nieuwenhuizen 8bae5fe860
DRAFT lib/m2: Update syscall includes.
This is a follow-up to commit
    bc1fa57851
    lib: stat: Use SYS_stat64 for 32bit platforms.

* lib/m2/chmod.c: Update to <arch/syscall.sh>.
* lib/m2/clock_gettime.c: Likewise.
* lib/m2/read.c: Likewise.
2023-02-13 13:08:39 +01:00
Jan (janneke) Nieuwenhuizen c656bab1fd
doc: Post-release update.
* build-aux/GNUmakefile.in (--previous-version): Update to 0.24.2.
* doc/announce/ANNOUNCE-0.24.2: Run `make sum-announce'.
2023-02-13 12:11:01 +01:00
77 changed files with 1314 additions and 462 deletions

View File

@ -398,7 +398,7 @@ gen-announce:
$(GEN_ANNOUNCE) \
--release-type=beta \
--package-name=mes \
--previous-version='0.24.1' \
--previous-version='0.24.2' \
--current-version=$(VERSION) \
--gpg-key-id=$(GPG_KEY_ID) \
--url-directory=https://ftp.gnu.org/gnu/mes \

View File

@ -1,7 +1,7 @@
#! @SHELL@
# 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.
#
@ -54,16 +54,18 @@ AM_CPPFLAGS="-D HAVE_CONFIG_H=1 -I ${srcdest}include -I ../include -I include"
AM_CFLAGS="-L ${srcdest}lib"
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.s $mes_cpu-mes
objects=
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
echo " CC $c"
$CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}$c
$CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS -o $o ${srcdest}$c
fi
objects="$objects $o"
done
@ -72,10 +74,11 @@ $AR crD $mes_cpu-mes/libc-mini.a $objects
objects=
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
echo " CC $c"
$CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}$c
$CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS -o $o ${srcdest}$c
fi
objects="$objects $o"
done
@ -84,10 +87,11 @@ $AR crD $mes_cpu-mes/libmescc.a $objects
objects=
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
echo " CC $c"
$CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}$c
$CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS -o $o ${srcdest}$c
fi
objects="$objects $o"
done
@ -96,10 +100,11 @@ $AR crD $mes_cpu-mes/libc.a $objects
objects=
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
echo " CC $c"
$CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}$c
$CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS -o $o ${srcdest}$c
fi
objects="$objects $o"
done
@ -113,10 +118,11 @@ AM_CFLAGS="-L ${srcdest}lib"
objects=
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
echo " CC $c"
$CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}$c
$CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS -o $o ${srcdest}$c
fi
objects="$objects $o"
done

View File

@ -1,7 +1,7 @@
#! /bin/sh
# 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.
#
@ -26,7 +26,8 @@
trap 'test -f .log && cat .log' EXIT
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
if test -e crt1.s; then
cp crt1.s $mes_cpu-mes

View File

@ -102,7 +102,8 @@ fi
)
if test -n "$M2_PLANET" && (test "$mes_cpu" == "x86" \
|| test "$mes_cpu" == "arm"); then
|| test "$mes_cpu" == "x86_64" \
|| test "$mes_cpu" == "arm" ); then
(
. ${srcdest}build-aux/trace.sh
if [ -z "$V" -o "$V" = 0 ]; then
@ -150,7 +151,6 @@ fi
${SHELL} ${srcdest}build-aux/build-lib.sh
${SHELL} ${srcdest}build-aux/build-source-lib.sh
if $bootstrap; then
rm -f globals.* # FIXME: avoid name clash with globals from lib
${SHELL} ${srcdest}build-aux/build-mes.sh
cp -f bin/mes-mescc ../bin
cp -f bin/mes ../bin

View File

@ -1,5 +1,5 @@
# 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.
#
@ -18,8 +18,12 @@
objects=
compile () {
c=${srcdest}$1
b=$(basename $c .c)
if test $(dirname $1) = "."; then
c=$1
else
c=${srcdest}$1
fi
b=$(echo $c | sed -re s,^[.]+/,, -e s,/,-,g -e s,[.]c$,,)
o=$b.o
objects="$objects $o"
if test ! -e $o -o $c -nt $o; then
@ -34,7 +38,7 @@ archive () {
sources="$@"
objects=
for c in $sources; do
b=$(basename $c .c)
b=$(echo $c | sed -re s,^[.]+/,, -e s,/,-,g -e s,[.]c$,,)
o=$b.o
compile $c
done

View File

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

View File

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

View File

@ -61,8 +61,8 @@ Enjoy!
Here are the SHA1 and SHA256 checksums:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx mes-0.24.2.tar.gz
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx mes-0.24.2.tar.gz
30b0ce4cd37c87dca37b85a6c19646001881be46 mes-0.24.2.tar.gz
7ddae0854e46ebfa18c13ab37e64839a7b86ea88aeed366a8d017efd11dae86e mes-0.24.2.tar.gz
[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact. First, be sure to download both the .sig file

View File

@ -87,7 +87,7 @@ get_machine.")
(define-public m2-planet
(package
(name "m2-planet")
(version "1.9.0")
(version "1.10.0")
(source (origin
(method git-fetch)
(uri (git-reference
@ -97,7 +97,7 @@ get_machine.")
(file-name (git-file-name name version))
(sha256
(base32
"0cgvvq91cbxxm93k8ayyvhpaf3c2lv10qw4wyqwn3hc1qb1cfyvr"))))
"03ixvfdzhyy1d94iqpwl0p924pdvdp7yq4ggm05w3c013kzy2y12"))))
(native-inputs (list mescc-tools))
(build-system gnu-build-system)
(arguments

View File

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

View File

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

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -22,50 +22,30 @@
/* libc-mini */
#ifndef SYS_exit
// CONSTANT SYS_exit 0x01
#define SYS_exit 0x01
#endif
#ifndef SYS_write
// CONSTANT SYS_write 0x04
#define SYS_write 0x04
#endif
/* libc */
// CONSTANT SYS_fork 0x02
#define SYS_fork 0x02
// CONSTANT SYS_read 0x03
#define SYS_read 0x03
// CONSTANT SYS_open 0x05
#define SYS_open 0x05
// CONSTANT SYS_waitpid 0x07
#define SYS_waitpid 0x07
// CONSTANT SYS_wait4 0x72
#define SYS_wait4 0x72
// CONSTANT SYS_execve 0x0b
#define SYS_execve 0x0b
// CONSTANT SYS_chmod 0x0f
#define SYS_chmod 0x0f
// CONSTANT SYS_access 0x21
#define SYS_access 0x21
// CONSTANT SYS_brk 0x2d
#define SYS_brk 0x2d
// CONSTANT SYS_ioctl 0x36
#define SYS_ioctl 0x36
// CONSTANT SYS_fsync 0x76
#define SYS_fsync 0x76
// CONSTANT SYS_getcwd 0xb7
#define SYS_getcwd 0xb7
// CONSTANT SYS_dup 0x29
#define SYS_dup 0x29
// CONSTANT SYS_dup2 0x3f
#define SYS_dup2 0x3f
// CONSTANT SYS_unlink 0x0a
#define SYS_unlink 0x0a
// CONSTANT SYS_gettimeofday 0x4e
#define SYS_gettimeofday 0x4e
// CONSTANT SYS_clock_gettime 0x109
#define SYS_clock_gettime 0x109
// CONSTANT SYS_time 0x0d
#define SYS_time 0x0d
/* 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

@ -20,6 +20,13 @@
#ifndef __M2_TYPES_H
#define __M2_TYPES_H 1
// FIXME M2_Planet chokes on -1, even inside #if ! __M2__
#if __arm__ || __i386__
#define EOF 0xffffffff
#else
#define EOF 0xffffffffffffffff
#endif
/*
#ifndef __MES_CLOCK_T
#define __MES_CLOCK_T

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -23,76 +23,32 @@
/* Cell types */
// CONSTANT TCHAR 0
#define TCHAR 0
// CONSTANT TBYTES 1
#define TBYTES 1
// CONSTANT TCLOSURE 2
#define TCLOSURE 2
// CONSTANT TCONTINUATION 3
#define TCONTINUATION 3
// CONSTANT TKEYWORD 4
#define TKEYWORD 4
// CONSTANT TMACRO 5
#define TMACRO 5
// CONSTANT TNUMBER 6
#define TNUMBER 6
// CONSTANT TPAIR 7
#define TPAIR 7
// CONSTANT TPORT 8
#define TPORT 8
// CONSTANT TREF 9
#define TREF 9
// CONSTANT TSPECIAL 10
#define TSPECIAL 10
// CONSTANT TSTRING 11
#define TSTRING 11
// CONSTANT TSTRUCT 12
#define TSTRUCT 12
// CONSTANT TSYMBOL 13
#define TSYMBOL 13
// CONSTANT TVALUES 14
#define TVALUES 14
// CONSTANT TVARIABLE 15
#define TVARIABLE 15
// CONSTANT TVECTOR 16
#define TVECTOR 16
// CONSTANT TBROKEN_HEART 17
#define TBROKEN_HEART 17
/* Struct types */
// CONSTANT STRUCT_TYPE 0
#define STRUCT_TYPE 0
// CONSTANT STRUCT_PRINTER 1
#define STRUCT_PRINTER 1
// CONSTANT GC_FRAME_SIZE 5
#define GC_FRAME_SIZE 5
// CONSTANT 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 */

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -17,14 +17,13 @@
* 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 __MES_LIB_CC_H
#define __MES_LIB_CC_H
#include <linux/syscall.h>
#include <syscall.h>
#include <time.h>
#define EOF -1
int
clock_gettime (long clk_id, struct timespec *tp)
{
long long_tp = tp;
return _sys_call2 (SYS_clock_gettime, clk_id, tp);
}
#if SYSTEM_LIBC
#define __raise(x) -1
#endif
#endif //__MES_LIB_CC_H

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -25,21 +25,27 @@
#include <mes/config.h>
#endif
// CONSTANT STDIN 0
#ifndef STDIN
#define STDIN 0
#endif
// CONSTANT STDOUT 1
#ifndef STDOUT
#define STDOUT 1
#endif
// CONSTANT STDERR 2
#ifndef STDERR
#define STDERR 2
#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 sizeof (void*)
#else
#define M2_PTR_SIZE 1
#endif
extern char **environ;
extern int __stdin;
extern int __stdout;
@ -63,10 +69,14 @@ int oputs (char const *s);
#ifndef __MES_SIZE_T
#define __MES_SIZE_T
#undef size_t
#if __M2__
typedef unsigned size_t;
#else
typedef unsigned long size_t;
#endif
#endif
#endif
#endif
#ifndef _SSIZE_T
#define _SSIZE_T

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -23,6 +23,9 @@
#include <mes/lib-mini.h>
#define __FILEDES_MAX 512
extern char *__brk;
char *cast_intp_to_charp (int const *i);
char *cast_long_to_charp (long i);
long cast_charp_to_long (char const *);
@ -34,14 +37,11 @@ void __ungetc_init ();
void __ungetc_clear (int filedes);
void __ungetc_set (int filedes, int c);
int __ungetc_p (int filedes);
double abtod (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 *ltoa (long number);
char *ltoab (long x, int base);
char *ntoab (long number, unsigned base, int signed_p);
char *ultoa (unsigned long number);
char *utoa (unsigned number);
int eputc (int c);
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);
void assert_msg (int check, char *msg);
extern char *__brk;
extern void (*__call_at_exit) (void);
#define __FILEDES_MAX 512
long __mesabi_imod (long a, long b);
long __mesabi_idiv (long a, long b);
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);
#if !SYSTEM_LIBC
void __assert_fail (char const *s, char const *file, unsigned line,
@ -75,16 +77,15 @@ void _exit (int code);
long brk (void *addr);
#endif // !SYSTEM_LIBC
long __mesabi_imod (long a, long b);
long __mesabi_idiv (long a, long b);
#if !__M2__
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_udiv (unsigned long a, unsigned long b);
unsigned long __mesabi_uldiv (unsigned long a, unsigned long b,
unsigned long *remainder);
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
#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 sizeof (struct scm)
#else
#define M2_CELL_SIZE 1
#endif
/* mes */
extern char *g_datadir;
extern int g_debug;

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -137,14 +137,8 @@ extern struct scm *cell_type_broken_heart;
extern struct scm *cell_symbol_program;
extern struct scm *cell_symbol_test;
// CONSTANT SYMBOL_MAX 114
#define SYMBOL_MAX 114
// CONSTANT CELL_UNSPECIFIED 7
#define CELL_UNSPECIFIED 7
// CONSTANT CELL_SYMBOL_RECORD_TYPE 82
#define CELL_SYMBOL_RECORD_TYPE 82
#endif /* __MES_SYMBOLS_H */

View File

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

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -65,30 +65,33 @@ int ferror (FILE * stream);
int fflush (FILE * stream);
int fgetc (FILE * stream);
char *fgets (char *s, int size, FILE * stream);
int fprintf (FILE * stream, char const *format, ...);
int fpurge (FILE * stream);
int fputc (int c, 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 getc (FILE * stream);
int getchar (void);
char *getlogin (void);
int printf (char const *format, ...);
int putc (int c, FILE * stream);
int putchar (int c);
int puts (char const *s);
int remove (char const *file_name);
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);
long ftell (FILE * stream);
size_t fread (void *ptr, size_t size, size_t count, FILE * stream);
size_t freadahead (FILE * fp);
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 // __MES_STDIO_H

View File

@ -28,8 +28,13 @@
#define TCGETS 0x5401
#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 ioctl3 (int fd, unsigned long request, long data);
#endif
#endif // ! SYSTEM_LIBC

View File

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

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -20,6 +20,8 @@
#ifndef __MES_SYS_TYPES_H
#define __MES_SYS_TYPES_H 1
#include <mes/lib-cc.h>
#if SYSTEM_LIBC
#undef __MES_SYS_TYPES_H
#include_next <sys/types.h>
@ -31,10 +33,6 @@
#define __MESCCLIB__ 15
#endif
#ifndef EOF
#define EOF -1
#endif
#ifndef NULL
#define NULL 0
#endif
@ -66,15 +64,23 @@ typedef unsigned gid_t;
#ifndef __MES_INO_T
#define __MES_INO_T
#undef ino_t
#if __M2__
typedef unsigned ino_t;
#else
typedef unsigned long ino_t;
#endif
#endif
#if __SIZEOF_LONG_LONG__ == 8
#ifndef __MES_INO64_T
#define __MES_INO64_T
#undef ino64_t
#if __M2__
typedef unsigned ino64_t;
#else
typedef unsigned long long ino64_t;
#endif
#endif
#endif // __SIZEOF_LONG_LONG__ == 8
#if !defined (__MES_INTPTR_T) && !defined (__intptr_t_defined)
@ -83,8 +89,12 @@ typedef unsigned long long ino64_t;
#undef intptr_t
typedef long intptr_t;
#undef uintptr_t
#if __M2__
typedef unsigned uintptr_t;
#else
typedef unsigned long uintptr_t;
#endif
#endif
#ifndef __MES_OFF_T
#define __MES_OFF_T
@ -96,8 +106,12 @@ typedef long off_t;
#ifndef __MES_OFF64_T
#define __MES_OFF64_T
#undef off64_t
#if __M2__
typedef unsigned off64_t;
#else
typedef unsigned long long off64_t;
#endif
#endif
#endif // __SIZEOF_LONG_LONG__ == 8
#ifndef __MES_PID_T
@ -126,9 +140,13 @@ typedef long sigval_t;
#ifndef __MES_SIZE_T
#define __MES_SIZE_T
#undef size_t
#if __M2__
typedef unsigned size_t;
#else
typedef unsigned long size_t;
#endif
#endif
#endif
#ifndef __MES_SSIZE_T
#define __MES_SSIZE_T

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -20,6 +20,8 @@
#ifndef __MES_SYS_WAIT_H
#define __MES_SYS_WAIT_H 1
#include <sys/resource.h>
#if SYSTEM_LIBC
#undef __MES_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 wait (int *status_ptr);
pid_t wait4 (pid_t pid, int *wstatus, int options,
struct rusage *rusage);
#endif // ! SYSTEM_LIBC

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -27,8 +27,8 @@
#ifndef __MES_TIME_T
#define __MES_TIME_T 1
typedef long int clockid_t;
typedef long int time_t;
typedef long clockid_t;
typedef long time_t;
#endif
struct tm

25
kaem.arm Normal file
View File

@ -0,0 +1,25 @@
#! /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
cc_cpu=arm
mes_cpu=arm
stage0_cpu=armv7l
kaem --verbose --strict

View File

@ -19,41 +19,51 @@
# Usage:
# kaem --verbose --strict
cc_cpu=${mes_cpu:-i386}
mes_cpu=${mes_cpu:-x86}
stage0_cpu=${stage0_cpu:-x86}
blood_elf_flag=${blood_elf_flag:-}
mkdir -p m2
M2-Planet \
--bootstrap-mode \
--debug \
--architecture ${stage0_cpu} \
-f include/m2/lib.h \
-D __${cc_cpu}__=1 \
-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/_exit.c \
-f lib/linux/${mes_cpu}-mes-m2/_write.c \
-f lib/mes/globals.c \
-f lib/m2/cast.c \
-f lib/m2/exit.c \
-f lib/mes/mini-write.c \
-f lib/linux/${mes_cpu}-mes-m2/syscall.c \
-f lib/stdlib/exit.c \
-f lib/mes/write.c \
-f include/linux/${mes_cpu}/syscall.h \
-f lib/linux/${mes_cpu}-mes-m2/syscall.c \
-f lib/stub/__raise.c \
-f lib/linux/brk.c \
-f lib/m2/malloc.c \
-f lib/linux/malloc.c \
-f lib/string/memset.c \
-f lib/m2/read.c \
-f lib/linux/read.c \
-f lib/mes/fdgetc.c \
-f lib/stdio/getchar.c \
-f lib/stdio/putchar.c \
-f lib/m2/open.c \
-f lib/m2/mes_open.c \
-f lib/stub/__buffered_read.c \
-f lib/linux/_open3.c \
-f lib/linux/open.c \
-f lib/mes/mes_open.c \
-f lib/string/strlen.c \
-f lib/mes/eputs.c \
-f lib/mes/fdputc.c \
-f lib/mes/eputc.c \
\
-f include/time.h \
-f include/sys/time.h \
-f include/m2/types.h \
-f include/sys/types.h \
-f include/mes/mes.h \
-f include/mes/builtins.h \
-f include/mes/constants.h \
@ -84,17 +94,21 @@ M2-Planet \
-f lib/linux/access.c \
-f include/linux/m2/kernel-stat.h \
-f include/sys/stat.h \
-f lib/m2/chmod.c \
-f lib/linux/chmod.c \
-f lib/linux/ioctl3.c \
-f include/sys/ioctl.h \
-f lib/m2/isatty.c \
-f lib/linux/fork.c \
-f lib/m2/execve.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/m2/clock_gettime.c \
-f lib/linux/clock_gettime.c \
-f lib/m2/time.c \
-f lib/linux/_getcwd.c \
-f include/limits.h \
-f lib/m2/getcwd.c \
-f lib/linux/dup.c \
-f lib/linux/dup2.c \
@ -105,6 +119,7 @@ M2-Planet \
-f src/core.c \
-f src/display.c \
-f src/eval-apply.c \
-f include/fcntl.h \
-f src/gc.c \
-f src/hash.c \
-f src/lib.c \
@ -112,6 +127,7 @@ M2-Planet \
-f src/math.c \
-f src/mes.c \
-f src/module.c \
-f include/signal.h \
-f src/posix.c \
-f src/reader.c \
-f src/stack.c \
@ -121,7 +137,7 @@ M2-Planet \
-f src/vector.c \
-o m2/mes.M1
blood-elf --little-endian -f m2/mes.M1 -o m2/mes.blood-elf-M1
blood-elf ${blood_elf_flag} --little-endian -f m2/mes.M1 -o m2/mes.blood-elf-M1
M1 \
--architecture ${stage0_cpu} \

25
kaem.x86 Normal file
View File

@ -0,0 +1,25 @@
#! /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
cc_cpu=i386
mes_cpu=x86
stage0_cpu=x86
kaem --verbose --strict

26
kaem.x86_64 Normal file
View File

@ -0,0 +1,26 @@
#! /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
cc_cpu=x86_64
mes_cpu=x86_64
stage0_cpu=amd64
blood_elf_flag=--64
kaem --verbose --strict

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -26,7 +26,9 @@
int
_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_charp_to_long (file_name);
int r = _sys_call3 (SYS_open, long_file_name, flags, mask);
__ungetc_init ();
if (r > 2)
{
__ungetc_clear (r);

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -24,23 +24,23 @@
#include <stdio.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);
long long_offset = offset;
return _sys_call3 (SYS_lseek, filedes, long_offset, whence);
}
#endif
off_t
lseek (int filedes, off_t offset, int whence)
{
#if !__MESC__ /* FIXME: We want bin/mes-mescc's x86-linux sha256sum to stay the same. */
#if !__MESC__ && !__M2__
if (_lseek (filedes, 0, SEEK_CUR) == -1)
return -1;
#endif
size_t skip = __buffered_read_clear (filedes);
if (whence == SEEK_CUR)
offset -= skip;
return _sys_call3 (SYS_lseek, (int) filedes, (long) offset, (int) whence);
long long_offset = offset;
return _sys_call3 (SYS_lseek, filedes, long_offset, whence);
}

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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>
*
* This file is part of GNU Mes.
@ -31,9 +31,11 @@ malloc (size_t size)
{
if (!__brk)
__brk = cast_long_to_charp (brk (0));
#if !__M2__
/* align what we give back. */
__brk = (char*) (((uintptr_t) __brk
+ sizeof (max_align_t) - 1) & -sizeof (max_align_t));
#endif
if (brk (__brk + size) == -1)
return 0;
char *p = __brk;

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -24,6 +24,7 @@
#include <fcntl.h>
#include <stdarg.h>
#if __M2__
int
open (char *file_name, int flags, int mask)
{
@ -32,3 +33,17 @@ open (char *file_name, int flags, int mask)
__ungetc_clear (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

@ -27,7 +27,9 @@ ssize_t
read (int filedes, void *buffer, size_t size)
{
long long_filedes = filedes;
ssize_t bytes = _sys_call3 (SYS_read, long_filedes, (long) buffer, (long) 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 (bytes == 1)
@ -48,5 +50,6 @@ read (int filedes, void *buffer, size_t size)
eputs ("\n");
}
}
#endif
return bytes;
}

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -22,18 +22,15 @@
#include <linux/syscall.h>
#include <arch/syscall.h>
#include <sys/types.h>
#include <sys/resource.h>
int
waitpid (int pid, int *status_ptr, int options)
pid_t
wait4 (pid_t pid, int *status_ptr, int options, struct rusage *rusage)
{
long long_pid = pid;
long long_status_ptr = cast_voidp_to_long (status_ptr);
long long_options = options;
//##if __i386__
//# return _sys_call3 (SYS_waitpid, long_pid, long_status_ptr, long_options);
//##elif __x86_64__ || __arm__
return _sys_call4 (SYS_wait4, long_pid, long_status_ptr, long_options, 0);
//##else
//##error arch not supported
//##endif
long long_rusage = cast_voidp_to_long (rusage);
return _sys_call4 (SYS_wait4, long_pid, long_status_ptr, long_options,
long_rusage);
}

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -18,17 +18,22 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <mes/lib.h>
#include <linux/syscall.h>
#include <arch/syscall.h>
#include <sys/types.h>
#include <sys/wait.h>
pid_t
waitpid (pid_t pid, int *status_ptr, int options)
{
#if __i386__
return _sys_call3 (SYS_waitpid, (long) pid, (long) status_ptr, (int) options);
#elif __x86_64__ || __arm__
return _sys_call4 (SYS_wait4, (long) pid, (long) status_ptr, (int) options, 0);
long long_pid = pid;
long long_status_ptr = cast_voidp_to_long (status_ptr);
long long_options = options;
#if defined (SYS_waitpid)
return _sys_call3 (SYS_waitpid, long_pid, long_status_ptr, long_options);
#elif defined (SYS_wait4)
return wait4 (pid, status_ptr, options, 0);
#else
#error arch not supported
#endif

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2018,2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -18,11 +18,12 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
int
mes_open (char *file_name, int flags, int mask)
#include "mes/lib-mini.h"
void
_exit (int status)
{
int filedes = open (file_name, flags, mask);
if (filedes > 2)
__ungetc_clear (filedes);
return filedes;
asm ("mov____$i32,%rax SYS_exit");
asm ("mov____0x8(%rbp),%rdi !-8");
asm ("syscall");
}

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2019,2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2018,2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -18,19 +18,14 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
#include <mes/lib.h>
#include <string.h>
#include "mes/lib-mini.h"
char *__brk = 0;
void *
malloc (size_t size)
void
_write (int filedes, void const *buffer, 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;
asm ("mov____$i32,%rax SYS_write");
asm ("mov____0x8(%rbp),%rdi !-8");
asm ("mov____0x8(%rbp),%rsi !-16");
asm ("mov____0x8(%rbp),%rdx !-24");
asm ("syscall");
}

View File

@ -0,0 +1,118 @@
### GNU Mes --- Maxwell Equations of Software
### Copyright (C) 2016 Jeremiah Orians
### Copyright © 2017,2018,2019,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/>.
:UNUSED_start
push___%rbp
mov____%rsp,%rbp
sub____$i32,%rsp %0x10a4
mov____$i8,%rax !0
movl___%eax,0x32 &GLOBAL___stdin
mov____$i8,%rax !1
movl___%eax,0x32 &GLOBAL___stdout
mov____$i8,%rax !2
movl___%eax,0x32 &GLOBAL___stderr
mov____%rbp,%rax
add____$i8,%rax !8
mov____(%rax),%rax
add____$i8,%rax !0x03
shl____$i8,%rax !0x03
add____%rbp,%rax
mov____%rax,0x32 &GLOBAL_environ
;; push___%rax ;M2-Planet pushes forward
mov____%rbp,%rax ;argc
add____$i8,%rax !8
mov____(%rax),%rax
push___%rax
mov____%rbp,%rax ;argv
add____$i8,%rax !16
push___%rax
mov____0x32,%rax &GLOBAL_environ
push___%rax ;env
mov____%rdi,%rbp ;M2-Planet calling convention
add____$i8,%rbp !8
call32 %FUNCTION_main
add____$i8,%rsp !0x0
test___%rax,%rax
mov____%rax,%rdi
mov____$i32,%rax %0x3c
syscall
hlt
mov____%rbp,%rsp
pop____%rbp
ret
:_start
COPY_rsp_to_rbp ; Protect rsp
;; Prepare argv
LOAD_BASE_ADDRESS_rax %8 ; ARGV_address = RBP + 8
PUSH_RAX ; Put argv on the stack
;; Prepare envp
COPY_rbp_to_rax ; Address we need to load from
LOAD_INTEGER ; Get ARGC
ADD_IMMEDIATE_to_rax %2 ; OFFSET = ARGC + 2
SAL_rax_Immediate8 !3 ; OFFSET = OFFSET * WORDSIZE
ADD_rbp_to_rax ; ENVP_address = RSP + OFFSET
PUSH_RAX ; Put envp on the stack
;; mes c lib environ
mov____%rax,0x32 &GLOBAL_environ
;; mes c lib io
mov____$i8,%rax !0
movl___%eax,0x32 &GLOBAL___stdin
mov____$i8,%rax !1
movl___%eax,0x32 &GLOBAL___stdout
mov____$i8,%rax !2
movl___%eax,0x32 &GLOBAL___stderr
LOAD_IMMEDIATE_rax &GLOBAL___stdin
PUSH_RAX #_common_recursion
LOAD_IMMEDIATE_rax %0
POP_RBX # _common_recursion
STORE_INTEGER
LOAD_IMMEDIATE_rax &GLOBAL___stdout
PUSH_RAX #_common_recursion
LOAD_IMMEDIATE_rax %1
POP_RBX # _common_recursion
STORE_INTEGER
LOAD_IMMEDIATE_rax &GLOBAL___stderr
PUSH_RAX #_common_recursion
LOAD_IMMEDIATE_rax %2
POP_RBX # _common_recursion
STORE_INTEGER
;; Stack offset
ADD_IMMEDIATE_to_rbp %8 ; Fix rbp
;; Perform the main loop
CALL_IMMEDIATE %FUNCTION_main
mov____%rax,%rdi
mov____$i32,%rax SYS_exit
syscall

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2019,2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2018,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -18,14 +18,17 @@
* 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>
#include "mes/lib-mini.h"
long
read (int filedes, void *buffer, long size)
{
long bytes = _sys_call3 (SYS_read, filedes, buffer, size);
return bytes;
}
int __stdin;
int __stdout;
int __stderr;
char **environ;
int main (int argc, char **argv, char **envp);
/* FIXME: this is going to be called `FUNCTION__start' */
//#int
//#_start ()
//#{
//# ..
//#}

View File

@ -0,0 +1,137 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,2017,2018,2020,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/>.
*/
#include <errno.h>
#include <linux/x86_64/syscall.h>
long
__sys_call (long sys_call)
{
asm ("mov____0x8(%rbp),%rax !-8");
asm ("syscall");
}
long
__sys_call1 (long sys_call, long one)
{
asm ("mov____0x8(%rbp),%rax !-8");
asm ("mov____0x8(%rbp),%rdi !-16");
asm ("syscall");
}
long
__sys_call2 (long sys_call, long one, long two)
{
asm ("mov____0x8(%rbp),%rax !-8");
asm ("mov____0x8(%rbp),%rdi !-16");
asm ("mov____0x8(%rbp),%rsi !-24");
asm ("syscall");
}
long
__sys_call3 (long sys_call, long one, long two, long three)
{
asm ("mov____0x8(%rbp),%rax !-8");
asm ("mov____0x8(%rbp),%rdi !-16");
asm ("mov____0x8(%rbp),%rsi !-24");
asm ("mov____0x8(%rbp),%rdx !-32");
asm ("syscall");
}
long
__sys_call4 (long sys_call, long one, long two, long three, long four)
{
asm ("mov____0x8(%rbp),%rax !-8");
asm ("mov____0x8(%rbp),%rdi !-16");
asm ("mov____0x8(%rbp),%rsi !-24");
asm ("mov____0x8(%rbp),%rdx !-32");
asm ("mov____0x8(%rbp),%r10 !-40");
asm ("syscall");
}
long
_sys_call (long sys_call)
{
long r = __sys_call (sys_call);
if (r < 0)
{
errno = -r;
r = -1;
}
else
errno = 0;
return r;
}
long
_sys_call1 (long sys_call, long one)
{
long r = __sys_call1 (sys_call, one);
if (r < 0)
{
errno = -r;
r = -1;
}
else
errno = 0;
return r;
}
long
_sys_call2 (long sys_call, long one, long two)
{
long r = __sys_call2 (sys_call, one, two);
if (r < 0)
{
errno = -r;
r = -1;
}
else
errno = 0;
return r;
}
long
_sys_call3 (long sys_call, long one, long two, long three)
{
long r = __sys_call3 (sys_call, one, two, three);
if (r < 0)
{
errno = -r;
r = -1;
}
else
errno = 0;
return r;
}
long
_sys_call4 (long sys_call, long one, long two, long three, long four)
{
long r = __sys_call4 (sys_call, one, two, three, four);
if (r < 0)
{
errno = -r;
r = -1;
}
else
errno = 0;
return r;
}

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,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -24,8 +24,6 @@
#include <stdlib.h>
#include <sys/types.h>
// CONSTANT PATH_MAX 1024
char *__getcwd_buf;
char *

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -24,7 +24,6 @@
#include <string.h>
#include <termio.h>
// CONSTANT TCGETS 0x5401
#define TCGETS 0x5401
struct ktermios

View File

@ -1,5 +1,6 @@
## Copyright (C) 2017 Jeremiah Orians
## Copyright (C) 2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
## Copyright (C) 2023 Andrius Štikonas <andrius@stikonas.eu>
## This file is part of M2-Planet.
##
## M2-Planet is free software: you can redistribute it and/or modify
@ -101,3 +102,85 @@ DEFINE SUBTRACT_eax_from_ebx_into_ebx 29C3
DEFINE TEST 85C0
DEFINE XCHG_eax_ebx 93
DEFINE XOR_ebx_eax_into_eax 31D8
DEFINE add_eax, 81C0
DEFINE add_ebp, 81C5
DEFINE add_ebx,eax 01C3
DEFINE add_eax,ebp 01E8
DEFINE add_eax,ebx 01D8
DEFINE and_eax,ebx 21D8
DEFINE call E8
DEFINE call_eax FFD0
DEFINE cmp 39C3
DEFINE cdq 99
DEFINE div_ebx F7F3
DEFINE idiv_ebx F7FB
DEFINE int CD
DEFINE je 0F84
DEFINE jne 0F85
DEFINE jmp E9
DEFINE lea_eax,[ebp+DWORD] 8D85
DEFINE lea_eax,[esp+DWORD] 8D8424
DEFINE lea_ebx,[esp+DWORD] 8D9C24
DEFINE lea_ecx,[esp+DWORD] 8D8C24
DEFINE lea_edx,[esp+DWORD] 8D9424
DEFINE mov_eax,[esp+DWORD] 8B8424
DEFINE mov_eax,ebp 89E8
DEFINE mov_eax,ebx 89D8
DEFINE mov_eax,ebx 89D8
DEFINE mov_eax,edx 89D0
DEFINE mov_ebx,eax 89C3
DEFINE mov_ecx,eax 89C1
DEFINE mov_ecx,esp 89E1
DEFINE mov_edi,esp 89E7
DEFINE mov_ebp,edi 89fd
DEFINE mov_ebp,esp 89E5
DEFINE mov_eax, B8
DEFINE mov_ebx, BB
DEFINE mov_edx, BA
DEFINE mov_eax,[eax] 8B00
DEFINE mov_ebx,[ebx] 8B1B
DEFINE mov_ecx,[ecx] 8B09
DEFINE mov_edx,[edx] 8B12
DEFINE mov_[ebx],al 8803
DEFINE mov_[ebx],ax 668903
DEFINE mov_[ebx],eax 8903
DEFINE movsx_eax,BYTE_PTR_[eax] 0FBE00
DEFINE movsx_ebx,BYTE_PTR_[ebx] 0FBE1B
DEFINE movsx_eax,WORD_PTR_[eax] 0FBF00
DEFINE movzx_eax,BYTE_PTR_[eax] 0FB600
DEFINE movzx_eax,WORD_PTR_[eax] 0FB700
DEFINE movzx_eax,al 0FB6C0
DEFINE mul_ebx F7E3
DEFINE imul_ebx F7EB
DEFINE NULL 00000000
DEFINE not_eax F7D0
DEFINE or_eax,ebx 09D8
DEFINE pop_eax 58
DEFINE pop_ebx 5B
DEFINE pop_ebp 5D
DEFINE pop_edi 5F
DEFINE push_eax 50
DEFINE push_ebx 53
DEFINE push_ebp 55
DEFINE push_edi 57
DEFINE ret C3
DEFINE sal_eax, C1E0
DEFINE sal_eax,cl D3F0
DEFINE shl_eax,cl D3E0
DEFINE sar_eax,cl D3F8
DEFINE shr_eax,cl D3E8
DEFINE seta_al 0F97C0
DEFINE setae_al 0F93C0
DEFINE setb_al 0F92C0
DEFINE setbe_al 0F96C0
DEFINE sete_al 0F94C0
DEFINE setle_al 0F9EC0
DEFINE setl_al 0F9CC0
DEFINE setge_al 0F9DC0
DEFINE setg_al 0F9FC0
DEFINE setne_al 0F95C0
DEFINE sub_ebx,eax 29C3
DEFINE test_eax,eax 85C0
DEFINE xchg_ebx,eax 93
DEFINE xor_eax,ebx 31D8

View File

@ -0,0 +1,74 @@
### Copyright (C) 2016 Jeremiah Orians
### Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
### This file is part of M2-Planet.
###
### M2-Planet 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.
###
### M2-Planet 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 M2-Planet. If not, see <http://www.gnu.org/licenses/>.
### stage0's hex2 format
### !<label> 1 byte relative
### $<label> 2 byte address
### @<label> 2 byte relative
### &<label> 4 byte address
### %<label> 4 byte relative
### if you wish to use this header, you need to add :ELF_end to the end of your
### M1 or hex2 files.
## ELF Header
:ELF_base
7F 45 4C 46 # e_ident[EI_MAG0-3] ELF's magic number
02 # e_ident[EI_CLASS] Indicating 64 bit
01 # e_ident[EI_DATA] Indicating little endianness
01 # e_ident[EI_VERSION] Indicating original elf
03 # e_ident[EI_OSABI] Set at 3 because FreeBSD is strict
00 # e_ident[EI_ABIVERSION] See above
00 00 00 00 00 00 00 # e_ident[EI_PAD]
02 00 # e_type Indicating Executable
3E 00 # e_machine Indicating AMD64
01 00 00 00 # e_version Indicating original elf
&_start 00 00 00 00 # e_entry Address of the entry point
%ELF_program_headers>ELF_base 00 00 00 00 # e_phoff Address of program header table
%ELF_section_headers>ELF_base 00 00 00 00 # e_shoff Address of section header table
00 00 00 00 # e_flags
40 00 # e_ehsize Indicating our 64 Byte header
38 00 # e_phentsize size of a program header table
01 00 # e_phnum number of entries in program table
40 00 # e_shentsize size of a section header table
05 00 # e_shnum number of entries in section table
02 00 # e_shstrndx index of the section names
:ELF_program_headers
:ELF_program_header__text
01 00 00 00 # ph_type: PT-LOAD = 1
07 00 00 00 # ph_flags: PF-X|PF-W|PF-R = 7
00 00 00 00 00 00 00 00 # ph_offset
&ELF_base 00 00 00 00 # ph_vaddr
&ELF_base 00 00 00 00 # ph_physaddr
%ELF_end>ELF_base 00 00 00 00 # ph_filesz
%ELF_end>ELF_base 00 00 00 00 # ph_memsz
01 00 00 00 00 00 00 00 # ph_align
:ELF_text

View File

@ -0,0 +1,184 @@
## Copyright (C) 2017 Jeremiah Orians
## This file is part of M2-Planet.
##
## M2-Planet 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.
##
## M2-Planet 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 M2-Planet. If not, see <http://www.gnu.org/licenses/>.
DEFINE ADD_IMMEDIATE_to_rax 4805
DEFINE ADD_IMMEDIATE_to_rbp 4881C5
DEFINE ADD_rax_to_rbx 4801C3
DEFINE ADD_rbp_to_rax 4801E8
DEFINE ADD_rbx_to_rax 4801D8
DEFINE AND_rax_rbx 4821D8
DEFINE CALL_IMMEDIATE E8
DEFINE CALL_rax FFD0
DEFINE CMP 4839C3
DEFINE COPY_rax_to_rcx 4889C1
DEFINE COPY_rax_to_rdi 4889C7
DEFINE COPY_rbx_to_rax 4889D8
DEFINE COPY_rbp_to_rax 4889E8
DEFINE COPY_rbx_to_rdi 4889DF
DEFINE COPY_rdi_to_rbp 4889FD
DEFINE COPY_rsp_to_rbp 4889E5
DEFINE COPY_RSP_to_RDI 4889E7
DEFINE CQTO 4899
DEFINE DIVIDE_rax_by_rbx_into_rax 48F7F3
DEFINE DIVIDES_rax_by_rbx_into_rax 48F7FB
DEFINE JUMP E9
DEFINE JUMP_EQ 0F84
DEFINE JUMP_NE 0F85
DEFINE LOAD_BASE_ADDRESS_rax 488D85
DEFINE LOAD_BYTE 480FBE00
DEFINE LOAD_BYTE_rbx 480FBE1B
DEFINE LOAD_EFFECTIVE_ADDRESS_rax 488D8424
DEFINE LOAD_EFFECTIVE_ADDRESS_rdi 488DBC24
DEFINE LOAD_EFFECTIVE_ADDRESS_rdx 488D9424
DEFINE LOAD_EFFECTIVE_ADDRESS_rsi 488DB424
DEFINE LOAD_IMMEDIATE_r10 48C7C2
DEFINE LOAD_IMMEDIATE_rax 48C7C0
DEFINE LOAD_IMMEDIATE_rbx 48C7C3
DEFINE LOAD_IMMEDIATE_rdi 48C7C7
DEFINE LOAD_IMMEDIATE_rdx 48C7C2
DEFINE LOAD_IMMEDIATE_rsi 48C7C6
DEFINE LOAD_INTEGER 488B00
DEFINE LOAD_INTEGER_rbx 488B1B
DEFINE LOAD_INTEGER_rdi 488B3F
DEFINE LOAD_INTEGER_rdx 488B12
DEFINE LOAD_INTEGER_rsi 488B36
DEFINE LOAD_RSP_IMMEDIATE_into_rax 488B8424
DEFINE MODULUS_rax_from_rbx_into_rbx 48F7F3
DEFINE MODULUSS_rax_from_rbx_into_rbx 48F7FB
DEFINE MOVE_rbx_to_rax 4889D8
DEFINE MOVE_rdx_to_rax 4889D0
DEFINE MOVEZX 480FB6C0
DEFINE MOVESX 4863C0
DEFINE MULTIPLY_rax_by_rbx_into_rax 48F7EB
DEFINE MULTIPLYS_rax_by_rbx_into_rax 48F7E3
DEFINE NULL 0000000000000000
DEFINE NOT_rax 48F7D0
DEFINE OR_rax_rbx 4809D8
DEFINE POP_RAX 58
DEFINE POP_RBP 5D
DEFINE POP_RBX 5B
DEFINE POP_RDI 5F
DEFINE PUSH_RAX 50
DEFINE PUSH_RBP 55
DEFINE PUSH_RBX 53
DEFINE PUSH_RDI 57
DEFINE RETURN C3
DEFINE SAL_rax_Immediate8 48C1E0
DEFINE SHL_rax_cl 48D3E0
DEFINE SAL_rax_cl 48D3F0
DEFINE SHR_rax_cl 48D3E8
DEFINE SAR_rax_cl 48D3F8
DEFINE SETA 0F97C0
DEFINE SETAE 0F93C0
DEFINE SETB 0F92C0
DEFINE SETBE 0F96C0
DEFINE SETE 0F94C0
DEFINE SETG 0F9FC0
DEFINE SETGE 0F9DC0
DEFINE SETL 0F9CC0
DEFINE SETLE 0F9EC0
DEFINE SETNE 0F95C0
DEFINE STORE_CHAR 8803
DEFINE STORE_INTEGER 488903
DEFINE SUBTRACT_rax_from_rbx_into_rbx 4829C3
DEFINE SYSCALL 0F05
DEFINE TEST 4885C0
DEFINE XCHG_rax_rbx 4893
DEFINE XOR_rbx_rax_into_rax 4831D8
DEFINE add_rax, 4805
DEFINE add_rbp, 4881C5
DEFINE add_rax,rbx 4801D8
DEFINE add_rax,rbp 4801E8
DEFINE add_rbx,rax 4801C3
DEFINE and_rax,rbx 4821D8
DEFINE call E8
DEFINE call_rax FFD0
DEFINE cmp_rbx,rax 4839C3
DEFINE cqo 4899
DEFINE div_rbx 48F7F3
DEFINE idiv_rbx 48F7FB
DEFINE jmp E9
DEFINE je 0F84
DEFINE jne 0F85
DEFINE lea_rax,[rbp+DWORD] 488D85
DEFINE lea_rax,[rip+DWORD] 488D05
DEFINE lea_rax,[rsp+DWORD] 488D8424
DEFINE lea_rdi,[rsp+DWORD] 488DBC24
DEFINE lea_rdx,[rsp+DWORD] 488D9424
DEFINE lea_rsi,[rsp+DWORD] 488DB424
DEFINE mov_rax, 48C7C0
DEFINE mov_rbx, 48C7C3
DEFINE mov_rdi, 48C7C7
DEFINE mov_rdx, 48C7C2
DEFINE mov_rsi, 48C7C6
DEFINE mov_r10, 49C7C2
DEFINE mov_rax,rdx 4889D0
DEFINE mov_rax,rbx 4889D8
DEFINE mov_rax,rbp 4889E8
DEFINE mov_rbp,rdi 4889FD
DEFINE mov_rbp,rsp 4889E5
DEFINE mov_rcx,rax 4889C1
DEFINE mov_rdi,rax 4889C7
DEFINE mov_rdi,rbx 4889DF
DEFINE mov_rdi,rsp 4889E7
DEFINE mov_[rbx],al 8803
DEFINE mov_[rbx],rax 488903
DEFINE mov_rax,[rax] 488B00
DEFINE mov_rbx,[rbx] 488B1B
DEFINE mov_rdi,[rdi] 488B3F
DEFINE mov_rdx,[rdx] 488B12
DEFINE mov_rsi,[rsi] 488B36
DEFINE mov_rax,[rsp+DWORD] 488B8424
DEFINE movzx_rax,al 480FB6C0
DEFINE movsxd_rax,eax 4863C0
DEFINE movsx_rax,BYTE_PTR_[rax] 480FBE00
DEFINE movsx_rbx,BYTE_PTR_[rbx] 480FBE1B
DEFINE imul_rbx 48F7EB
DEFINE mul_rbx 48F7E3
DEFINE NULL 0000000000000000
DEFINE not_rax 48F7D0
DEFINE or_rax,rbx 4809D8
DEFINE pop_rax 58
DEFINE pop_rbp 5D
DEFINE pop_rbx 5B
DEFINE pop_rdi 5F
DEFINE push_rax 50
DEFINE push_rbp 55
DEFINE push_rbx 53
DEFINE push_rdi 57
DEFINE ret C3
DEFINE sal_rax, 48C1E0
DEFINE shl_rax,cl 48D3E0
DEFINE sal_rax,cl 48D3F0
DEFINE shr_rax,cl 48D3E8
DEFINE sar_rax,cl 48D3F8
DEFINE seta_al 0F97C0
DEFINE setae_al 0F93C0
DEFINE setb_al 0F92C0
DEFINE setbe_al 0F96C0
DEFINE sete_al 0F94C0
DEFINE setg_al 0F9FC0
DEFINE setge_al 0F9DC0
DEFINE setl_al 0F9CC0
DEFINE setle_al 0F9EC0
DEFINE setne_al 0F95C0
DEFINE sub_rbx,rax 4829C3
DEFINE syscall 0F05
DEFINE test_rax,rax 4885C0
DEFINE xchg_rbx,rax 4893
DEFINE xor_rax,rbx 4831D8

View File

@ -25,7 +25,7 @@ void
__assert_fail (char const *msg, char const *file, unsigned line,
char const *function)
{
if (file && file[0])
if (file && *file)
{
eputs (file);
eputs (":");
@ -35,7 +35,7 @@ __assert_fail (char const *msg, char const *file, unsigned line,
eputs (itoa (line));
eputs (":");
}
if (function && function[0])
if (function && *function)
{
eputs (function);
eputs (":");

View File

@ -23,7 +23,19 @@
#include <stdlib.h>
#include <string.h>
#if __M2_PLANET__ || (!(__MESC__ && __arm__) && !(__TINYC__ && __arm__ && BOOTSTRAP))
#if __MESC__ && __arm__
#define __MESC__and__arm__
#endif
#if __TINYC__ && __arm__ && BOOTSTRAP
#define __TINYC__and__arm__and__BOOTSTRAP
#endif
#define __not__MESC__arm__and__not__TINYC__arm__BOOTSTRAP !defined (__MESC__and__arm__) && !defined (__TINYC__and__arm__and__BOOTSTRAP)
// FIXME: M2-Planet 1.10.0 crashes on this...
// #if __M2__ || (!defined (__MESC__and__arm__) && !defined (__TINYC__and__arm__and__BOOTSTRAP))
#if __M2__ || __not__MESC__arm__and__not__TINYC__arm__BOOTSTRAP
size_t
__mesabi_uldiv (size_t a, size_t b, size_t *remainder)
{

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -23,8 +23,6 @@
#include <sys/types.h>
#include <mes/lib.h>
char *__getcwd_buf;
char *
getcwd (char *buffer, size_t size)
{

View File

@ -1,6 +1,6 @@
/*
* 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.
*
@ -22,9 +22,6 @@
#include <string.h>
#include <stdlib.h>
// CONSTANT M2_PTR_SIZE 4
#define M2_PTR_SIZE 1
char *
getenv (char const *s)
{

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -29,6 +29,13 @@ _open2 (char const *file_name, int flags)
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
open (char const *file_name, int flags, ...)
{
@ -44,3 +51,4 @@ open (char const *file_name, int flags, ...)
else
return _open2 (file_name, flags);
}
#endif // !__M2__

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -22,9 +22,6 @@
#include <string.h>
#include <stdlib.h>
// CONSTANT M2_PTR_SIZE 4
#define M2_PTR_SIZE 1
int
setenv (char const *s, char const *v, int overwrite_p)
{

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -20,12 +20,16 @@
#include <mes/lib.h>
#if !__M2__
void (*__call_at_exit) (void);
#endif
void
exit (int code)
{
#if !__M2__
if (__call_at_exit)
(*__call_at_exit) ();
#endif
_exit (code);
}

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -19,11 +19,15 @@
*/
#include <mes/lib.h>
void _exit (int code);
#include <stdlib.h>
#include <string.h>
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:""-*-
* 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.
*
@ -18,8 +18,6 @@
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
*/
// CONSTANT SIGABRT 0
int
__raise (int signum)
{

View File

@ -28,6 +28,7 @@ DEFINE add____$i32,%rdi 4881c7
DEFINE add____$i32,(%rax) 8100
DEFINE add____$i32,0x32(%rbp) 8185
DEFINE add____$i8,%rax 4883c0
DEFINE add____$i8,%rbp 4883c5
DEFINE add____$i8,%rdi 4883c7
DEFINE add____$i8,%rsp 4883c4
DEFINE add____$i8,(%rax) 8300
@ -115,6 +116,7 @@ DEFINE mov____%rbp,%rsp 4889ec
DEFINE mov____%rbp,0x8(%rbp) 48896d
DEFINE mov____%rdi,%r8 4989f8
DEFINE mov____%rdi,%rax 4889f8
DEFINE mov____%rdi,%rbp 4889fd
DEFINE mov____%rdi,%rcx 4889f9
DEFINE mov____%rdi,%rdi 4889ff
DEFINE mov____%rdi,0x32 48893c25

View File

@ -24,15 +24,14 @@ mes_cpu=${mes_cpu:-x86}
stage0_cpu=${stage0_cpu:-x86}
M2-Planet \
--bootstrap-mode \
--debug \
--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/_exit.c \
-f lib/linux/${mes_cpu}-mes-m2/_write.c \
-f lib/string/strlen.c \
-f lib/mes/mini-write.c \
-f lib/mes/write.c \
-f lib/mes/eputs.c \
-f lib/string/strcmp.c \
-f scaffold/argv.c \

194
scaffold/bug.c Normal file
View File

@ -0,0 +1,194 @@
extern int g_debug;
size_t
__mesabi_uldiv (size_t a, size_t b, size_t *remainder)
{
remainder[0] = a % b;
return a / b;
}
char *
ntoab_local (long x, unsigned base, int signed_p)
{
char* __itoa_buf = "012345678911234567890";
if (g_debug > 2) eputs ("ntoab 00\n");
char *p = __itoa_buf + 11;
if (g_debug > 2) eputs ("ntoab 03\n");
p[0] = 0;
if (g_debug > 2) eputs ("ntoab 04\n");
p = p - 1;
if (g_debug > 2) eputs ("ntoab 05\n");
int sign_p = 0;
size_t i;
size_t u;
size_t b = base;
if (signed_p != 0 && x < 0)
{
sign_p = 1;
/* Avoid LONG_MIN */
u = (-(x + 1));
u = u + 1;
}
else
u = x;
do
{
u = __mesabi_uldiv (u, b, &i);
if (i > 9)
p[0] = 'a' + i - 10;
else
p[0] = '0' + i;
p = p - 1;
}
while (u != 0);
if (sign_p && p[1] != '0')
{
p[0] = '-';
p = p - 1;
}
return p + 1;
}
char *
itoa_local (int x)
{
return ntoab_local (x, 10, 1);
}
char* __itoa_buf_global = "012345678911234567890";
char *
ntoab_global (long x, unsigned base, int signed_p)
{
char *p;
if (g_debug > 2) eputs ("ntoab 00\n");
//char *p = __itoa_buf + 11;
p = __itoa_buf_global + 11;
if (g_debug > 2) eputs ("ntoab 03\n");
p[0] = 0;
if (g_debug > 2) eputs ("ntoab 04\n");
p = p - 1;
if (g_debug > 2) eputs ("ntoab 05\n");
int sign_p = 0;
size_t i;
size_t u;
size_t b = base;
if (signed_p != 0 && x < 0)
{
sign_p = 1;
/* Avoid LONG_MIN */
u = (-(x + 1));
u = u + 1;
}
else
u = x;
do
{
u = __mesabi_uldiv (u, b, &i);
if (i > 9)
p[0] = 'a' + i - 10;
else
p[0] = '0' + i;
p = p - 1;
}
while (u != 0);
if (sign_p && p[1] != '0')
{
p[0] = '-';
p = p - 1;
}
return p + 1;
}
char *
itoa_global (int x)
{
return ntoab_global (x, 10, 1);
}
char* __itoa_buf;
char *
ntoab (long x, unsigned base, int signed_p)
{
if (g_debug > 2) eputs ("ntoab 00\n");
if (__itoa_buf == 0)
{
if (g_debug > 2) eputs ("ntoab 01\n");
__itoa_buf = malloc (20);
if (g_debug > 2) eputs ("ntoab 02\n");
}
char *p = __itoa_buf + 11;
if (__itoa_buf == 0)
eputs ("MALLOC FAILED ON __itoa_buf\n");
p = __itoa_buf + 11;
if (g_debug > 2) eputs ("ntoab 03\n");
p[0] = 0;
if (g_debug > 2) eputs ("ntoab 04\n");
p = p - 1;
if (g_debug > 2) eputs ("ntoab 05\n");
int sign_p = 0;
size_t i;
size_t u;
size_t b = base;
if (signed_p != 0 && x < 0)
{
sign_p = 1;
/* Avoid LONG_MIN */
u = (-(x + 1));
u = u + 1;
}
else
u = x;
do
{
u = __mesabi_uldiv (u, b, &i);
if (i > 9)
p[0] = 'a' + i - 10;
else
p[0] = '0' + i;
p = p - 1;
}
while (u != 0);
if (sign_p && p[1] != '0')
{
p[0] = '-';
p = p - 1;
}
return p + 1;
}
char *
itoa (int x)
{
return ntoab (x, 10, 1);
}
int
main (int argc, char **argv)
{
eputs ("local thirtythree=");
eputs (itoa_local (33));
eputs ("\n");
eputs ("global thirtythree=");
eputs (itoa_global (33));
eputs ("\n");
eputs ("thirtythree=");
eputs (itoa (33));
eputs ("\n");
}

50
scaffold/bug.kaem Normal file
View File

@ -0,0 +1,50 @@
#! /bin/sh
# Usage:
# kaem --verbose --strict --file scaffold/bug.kaem
# scaffold/bug-m2
mes_cpu=${mes_cpu:-x86}
stage0_cpu=${stage0_cpu:-x86}
M2-Planet \
--debug \
--architecture ${stage0_cpu} \
-f lib/linux/${mes_cpu}-mes-m2/crt1.c \
-f include/mes/lib-mini.h \
-f lib/linux/${mes_cpu}-mes-m2/_write.c \
-f lib/linux/${mes_cpu}-mes-m2/_exit.c \
-f include/linux/${mes_cpu}/syscall.h \
-f lib/linux/${mes_cpu}-mes-m2/syscall.c \
-f lib/m2/cast.c \
-f include/mes/lib.h \
-f lib/string/strlen.c \
-f lib/mes/write.c \
-f lib/mes/eputs.c \
-f lib/linux/brk.c \
-f lib/linux/malloc.c \
-f scaffold/bug.c \
-o scaffold/bug.M1
blood-elf --little-endian -f scaffold/bug.M1 -o scaffold/bug.blood-elf-M1
M1 \
--architecture ${stage0_cpu} \
--little-endian \
-f lib/m2/${mes_cpu}/${mes_cpu}_defs.M1 \
-f lib/${mes_cpu}-mes/${mes_cpu}.M1 \
-f lib/linux/${mes_cpu}-mes-m2/crt1.M1 \
-f scaffold/bug.M1 \
-f scaffold/bug.blood-elf-M1 \
-o scaffold/bug.hex2
hex2 \
--architecture ${stage0_cpu} \
--little-endian \
--base-address 0x1000000 \
-f lib/m2/${mes_cpu}/ELF-${mes_cpu}.hex2 \
-f scaffold/bug.hex2 \
-o scaffold/bug-m2
echo Now run: scaffold/bug-m2
./scaffold/bug-m2

View File

@ -30,7 +30,7 @@ M2-Planet \
-f lib/mes/globals.c \
-f lib/linux/${mes_cpu}-mes-m2/_exit.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/strcpy.c \
-f lib/mes/eputs.c \

View File

@ -24,15 +24,14 @@ mes_cpu=${mes_cpu:-x86}
stage0_cpu=${stage0_cpu:-x86}
M2-Planet \
--bootstrap-mode \
--debug \
--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/_exit.c \
-f lib/linux/${mes_cpu}-mes-m2/_write.c \
-f lib/string/strlen.c \
-f lib/mes/mini-write.c \
-f lib/mes/write.c \
-f lib/mes/eputs.c \
-f scaffold/hello.c \
-o scaffold/hello.M1

View File

@ -30,7 +30,7 @@ M2-Planet \
-f lib/mes/globals.c \
-f lib/linux/${mes_cpu}-mes-m2/_exit.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/strcpy.c \
-f lib/mes/eputs.c \

View File

@ -30,7 +30,7 @@ M2-Planet \
-f lib/mes/globals.c \
-f lib/linux/${mes_cpu}-mes-m2/_exit.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/strcpy.c \
-f lib/mes/eputs.c \

View File

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

View File

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

View File

@ -33,7 +33,7 @@ M2_PLANET_FUBAR = i386
#M2_PLANET_ARCH = amd64
#M2_PLANET_FUBAR = amd64
M2_PLANET_FLAGS = --bootstrap-mode --debug --architecture $(M2_PLANET_ARCH)
M2_PLANET_FLAGS = --debug --architecture $(M2_PLANET_ARCH)
CFLAGS:= \
$(CFLAGS) \
@ -76,22 +76,26 @@ M2_SOURCES = \
lib/linux/x86-mes-m2/crt1.c \
lib/linux/x86-mes-m2/_exit.c \
lib/linux/x86-mes-m2/_write.c \
lib/mes/globals.c \
lib/mes/globals.c \
lib/m2/cast.c \
lib/m2/exit.c \
lib/mes/mini-write.c \
lib/stdlib/exit.c \
lib/stub/__buffered_read.c \
lib/linux/x86-mes-m2/syscall.c \
lib/stub/__raise.c \
lib/linux/brk.c \
lib/m2/malloc.c \
lib/linux/malloc.c \
lib/string/memset.c \
\
lib/m2/read.c \
lib/linux/read.c \
lib/mes/fdgetc.c \
lib/linux/lseek.c \
lib/posix/write.c \
\
lib/stdio/getchar.c \
lib/stdio/putchar.c \
lib/m2/open.c \
lib/m2/mes_open.c \
lib/stub/__buffered_read.c \
lib/linux/_open3.c \
lib/linux/open.c \
lib/mes/mes_open.c \
lib/string/strlen.c \
lib/mes/eputs.c \
lib/mes/fdputc.c \
@ -120,15 +124,16 @@ M2_SOURCES = \
lib/mes/fdungetc.c \
lib/posix/setenv.c \
lib/linux/access.c \
lib/m2/chmod.c \
lib/linux/chmod.c \
lib/linux/ioctl3.c \
lib/m2/isatty.c \
lib/linux/fork.c \
lib/m2/execve.c \
lib/m2/execv.c \
lib/m2/waitpid.c \
lib/linux/wait4.c \
lib/linux/waitpid.c \
lib/linux/gettimeofday.c \
lib/m2/clock_gettime.c \
lib/linux/clock_gettime.c \
lib/m2/time.c \
lib/linux/_getcwd.c \
lib/m2/getcwd.c \
@ -139,12 +144,6 @@ M2_SOURCES = \
lib/linux/unlink.c \
src/m2.c
M2_TODO = \
lib/m2/file_print.c \
lib/mes/ntoab.c \
lib/mes/fdgetc.c \
lib/mes/fdungetc.c
INCLUDES = \
include/mes/builtins.h \
include/mes/constants.h \
@ -189,8 +188,20 @@ bin/gc-gcc: simple.make $(GCC_SOURCES) $(TEST_GC_SOURCES) $(INCLUDES) | bin
$(CC) $(CFLAGS) -D GC_TEST=1 -o $@ $(GCC_SOURCES) $(TEST_GC_SOURCES)
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/time.h \
include/sys/time.h \
include/m2/types.h \
include/sys/types.h \
include/stdio.h \
include/limits.h \
include/sys/stat.h \
include/fcntl.h \
include/signal.h \
include/sys/resource.h \
include/mes/mes.h \
include/mes/builtins.h \
include/mes/constants.h \

View File

@ -109,7 +109,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/mes/globals.c\
# lib/mes/mini-write.c\
# lib/mes/write.c\
# lib/string/strlen.c\
# \
# scaffold/hello.c
@ -123,7 +123,7 @@ cat \
lib/linux/$mes_cpu-mes-mescc/_write.c \
\
lib/mes/globals.c \
lib/mes/mini-write.c \
lib/mes/write.c \
lib/string/strlen.c \
\
scaffold/hello.c \
@ -263,6 +263,8 @@ $CC -g -D HAVE_CONFIG_H=1 \
lib/linux/_read.c \
lib/linux/time.c \
lib/linux/unlink.c \
include/sys/resource.h \
lib/linux/wait4.c \
lib/linux/waitpid.c \
lib/linux/$mes_cpu-mes-$compiler/syscall.c \
\
@ -313,7 +315,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/mes/globals.c\
# lib/mes/mini-write.c\
# lib/mes/write.c\
# lib/string/strlen.c\
# \
# scaffold/hello.c
@ -327,7 +329,7 @@ cat \
lib/linux/$mes_cpu-mes-mescc/_write.c \
\
lib/mes/globals.c \
lib/mes/mini-write.c \
lib/mes/write.c \
lib/string/strlen.c \
\
scaffold/hello.c \

View File

@ -148,7 +148,7 @@ length (struct scm *x)
struct scm *
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);
if (throw != cell_undefined)
return apply (throw, cons (key, cons (x, cell_nil)), R0);

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
@ -31,9 +31,6 @@
int g_dump_filedes;
#define M2_CELL_SIZE 1U
// CONSTANT M2_CELL_SIZE 12
char *
cell_bytes (struct scm *x)
{
@ -41,16 +38,20 @@ cell_bytes (struct scm *x)
return p + (2 * sizeof (long));
}
#if __M2__
#define U10 10
#define U100 100
#else
#define U10 10U
// CONSTANT U10 10
#define U100 100U
// CONSTANT U100 100
#endif
void
gc_init ()
{
#if SYSTEM_LIBC
ARENA_SIZE = 100000000; /* 2.3GiB */
#elif ! __M2_PLANET__
#elif ! __M2__
ARENA_SIZE = 300000; /* 32b: 3MiB, 64b: 6 MiB */
#else
ARENA_SIZE = 20000000;
@ -91,7 +92,7 @@ gc_init ()
g_cells = cast_charp_to_scmp (g_arena);
g_stack_array = cast_charp_to_scmpp (g_arena + arena_bytes);
/* The vector that holds the arenea. */
/* The vector that holds the arena. */
cell_arena = g_cells;
cell_zero = cell_arena + M2_CELL_SIZE;

View File

@ -34,10 +34,6 @@
#include <sys/wait.h>
#include <unistd.h>
#if SYSTEM_LIBC
#define __raise(x) -1
#endif
struct scm *
abort_ () /*:((name . "abort")) */
{
@ -379,12 +375,14 @@ waitpid_ (struct scm *pid, struct scm *options)
#if __x86_64__
/* Nanoseconds on 64-bit systems with POSIX timers. */
// CONSTANT TIME_UNITS_PER_SECOND 1000000000
#if __M2__
#define TIME_UNITS_PER_SECOND 1000000000
#else
#define TIME_UNITS_PER_SECOND 1000000000U
#endif
#else
/* Milliseconds for everyone else. */
// CONSTANT TIME_UNITS_PER_SECOND 1000
#define TIME_UNITS_PER_SECOND 1000U
#define TIME_UNITS_PER_SECOND 1000
#endif
struct scm *
@ -408,8 +406,12 @@ gettimeofday_ () /*:((name . "gettimeofday")) */
return cons (make_number (time->tv_sec), make_number (time->tv_usec));
}
#if __M2__
#define UL1000000000 1000000000
#else
#define UL1000000000 1000000000UL
// CONSTANT UL1000000000 1000000000
#endif
long
seconds_and_nanoseconds_to_long (long s, long ns)
{

View File

@ -23,16 +23,6 @@
#include <string.h>
// char const *MES_VERSION = "0.24.2";
#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 *
init_symbol (struct scm *x, long type, char const *name)
{

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -24,9 +24,6 @@
#include <stdlib.h>
#include <string.h>
#define M2_CELL_SIZE 1
// CONSTANT M2_CELL_SIZE 12
int g_debug;
void

View File

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -21,14 +21,6 @@
#include "mes/lib.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 *
make_vector_ (long k, struct scm *e)
{