build: Prepare for kernel variants.
authorJan Nieuwenhuizen <janneke@gnu.org>
Wed, 11 Dec 2019 07:16:46 +0000 (07:16 +0000)
committerJan Nieuwenhuizen <janneke@gnu.org>
Tue, 17 Dec 2019 20:07:35 +0000 (21:07 +0100)
* configure: Fix detection of Arch, FreeBSD.
* lib/linux/x86-mes-gcc/exit-42.S: Move from ...
* lib/x86-mes-gcc/exit-42.S: ... here.
* lib/linux/x86-mes-gcc/hello-mes.S: Move from ...
* lib/x86-mes-gcc/hello-mes.S: ... here.
* lib/linux/x86-mes-mescc/exit-42.S: Move from ...
* lib/x86-mes-mescc/exit-42.S: ... here.
* lib/linux/x86-mes-mescc/hello-mes.S: Move from ...
* lib/x86-mes-mescc/hello-mes.S: ... here.
* lib/linux/x86-mes/elf32-0exit-42.hex2: Move from ...
* lib/x86-mes/elf32-0exit-42.hex2: ... here.
* lib/linux/x86-mes/elf32-0header.hex2: Move from ...
* lib/x86-mes/elf32-0header.hex2: ... here.
* lib/linux/x86-mes/elf32-0hello-mes.hex2: Move from ...
* lib/x86-mes/elf32-0hello-mes.hex2: ... here.
* lib/linux/x86-mes/elf32-body-exit-42.hex2: Move from ...
* lib/x86-mes/elf32-body-exit-42.hex2: ... here.
* lib/linux/x86-mes/elf32-body-hello-mes.hex2: Move from ...
* lib/x86-mes/elf32-body-hello-mes.hex2: ... here.
* lib/linux/x86-mes/elf32-footer-single-main.hex2: Move from ...
* lib/x86-mes/elf32-footer-single-main.hex2: ... here.
* lib/linux/x86-mes/elf32-header.hex2: Move from ...
* lib/x86-mes/elf32-header.hex2: ... here.
* lib/linux/x86_64-mes-gcc/exit-42.S: Move from ...
* lib/x86_64-mes-gcc/exit-42.S: ... here.
* lib/linux/x86_64-mes-gcc/hello-mes.S: Move from ...
* lib/x86_64-mes-gcc/hello-mes.S: ... here.
* lib/linux/x86_64-mes-mescc/exit-42.S: Move from ...
* lib/x86_64-mes-mescc/exit-42.S: ... here.
* lib/linux/x86_64-mes-mescc/hello-mes.S: Move from ...
* lib/x86_64-mes-mescc/hello-mes.S: ... here.
* lib/linux/x86_64-mes/elf64-0exit-42.hex2: Move from ...
* lib/x86_64-mes/elf64-0exit-42.hex2: ... here.
* lib/linux/x86_64-mes/elf64-0header.hex2: Move from ...
* lib/x86_64-mes/elf64-0header.hex2: ... here.
* lib/linux/x86_64-mes/elf64-0hello-mes.hex2: Move from ...
* lib/x86_64-mes/elf64-0hello-mes.hex2: ... here.
* lib/linux/x86_64-mes/elf64-body-exit-42.hex2: Move from ...
* lib/x86_64-mes/elf64-body-exit-42.hex2: ... here.
* lib/linux/x86_64-mes/elf64-body-hello-mes.hex2: Move from ...
* lib/x86_64-mes/elf64-body-hello-mes.hex2: ... here.
* lib/linux/x86_64-mes/elf64-footer-single-main.hex2: Move from ...
* lib/x86_64-mes/elf64-footer-single-main.hex2: ... here.
* lib/linux/x86_64-mes/elf64-header.hex2: Move from ...
* lib/x86_64-mes/elf64-header.hex2: ... here.
* module/mescc.scm (parse-opts): Support --kernel.
* module/mescc/mescc.scm (kernel-find): New function.
* module/mescc/mescc.scm (hex2->elf): Use it to find kernel-specific ELF
snippets.
* build-aux/install.sh.in: Install it.

50 files changed:
build-aux/build-scaffold.sh
build-aux/install.sh.in
configure
lib/linux/x86-mes-gcc/exit-42.S [new file with mode: 0644]
lib/linux/x86-mes-gcc/hello-mes.S [new file with mode: 0644]
lib/linux/x86-mes-mescc/exit-42.S [new file with mode: 0644]
lib/linux/x86-mes-mescc/hello-mes.S [new file with mode: 0644]
lib/linux/x86-mes/elf32-0exit-42.hex2 [new file with mode: 0644]
lib/linux/x86-mes/elf32-0header.hex2 [new file with mode: 0644]
lib/linux/x86-mes/elf32-0hello-mes.hex2 [new file with mode: 0644]
lib/linux/x86-mes/elf32-body-exit-42.hex2 [new file with mode: 0644]
lib/linux/x86-mes/elf32-body-hello-mes.hex2 [new file with mode: 0644]
lib/linux/x86-mes/elf32-footer-single-main.hex2 [new file with mode: 0644]
lib/linux/x86-mes/elf32-header.hex2 [new file with mode: 0644]
lib/linux/x86_64-mes-gcc/exit-42.S [new file with mode: 0644]
lib/linux/x86_64-mes-gcc/hello-mes.S [new file with mode: 0644]
lib/linux/x86_64-mes-mescc/exit-42.S [new file with mode: 0644]
lib/linux/x86_64-mes-mescc/hello-mes.S [new file with mode: 0644]
lib/linux/x86_64-mes/elf64-0exit-42.hex2 [new file with mode: 0644]
lib/linux/x86_64-mes/elf64-0header.hex2 [new file with mode: 0644]
lib/linux/x86_64-mes/elf64-0hello-mes.hex2 [new file with mode: 0644]
lib/linux/x86_64-mes/elf64-body-exit-42.hex2 [new file with mode: 0644]
lib/linux/x86_64-mes/elf64-body-hello-mes.hex2 [new file with mode: 0644]
lib/linux/x86_64-mes/elf64-footer-single-main.hex2 [new file with mode: 0644]
lib/linux/x86_64-mes/elf64-header.hex2 [new file with mode: 0644]
lib/x86-mes-gcc/exit-42.S [deleted file]
lib/x86-mes-gcc/hello-mes.S [deleted file]
lib/x86-mes-mescc/exit-42.S [deleted file]
lib/x86-mes-mescc/hello-mes.S [deleted file]
lib/x86-mes/elf32-0exit-42.hex2 [deleted file]
lib/x86-mes/elf32-0header.hex2 [deleted file]
lib/x86-mes/elf32-0hello-mes.hex2 [deleted file]
lib/x86-mes/elf32-body-exit-42.hex2 [deleted file]
lib/x86-mes/elf32-body-hello-mes.hex2 [deleted file]
lib/x86-mes/elf32-footer-single-main.hex2 [deleted file]
lib/x86-mes/elf32-header.hex2 [deleted file]
lib/x86_64-mes-gcc/exit-42.S [deleted file]
lib/x86_64-mes-gcc/hello-mes.S [deleted file]
lib/x86_64-mes-mescc/exit-42.S [deleted file]
lib/x86_64-mes-mescc/hello-mes.S [deleted file]
lib/x86_64-mes/elf64-0exit-42.hex2 [deleted file]
lib/x86_64-mes/elf64-0header.hex2 [deleted file]
lib/x86_64-mes/elf64-0hello-mes.hex2 [deleted file]
lib/x86_64-mes/elf64-body-exit-42.hex2 [deleted file]
lib/x86_64-mes/elf64-body-hello-mes.hex2 [deleted file]
lib/x86_64-mes/elf64-footer-single-main.hex2 [deleted file]
lib/x86_64-mes/elf64-header.hex2 [deleted file]
module/mescc.scm
module/mescc/mescc.scm
scripts/mescc.scm.in

index 42c62f468ad19eb3eb06011ad8f7422f32c339ba..911e8cdead646f4d20adb01f294db8c07701f527 100755 (executable)
@@ -61,10 +61,10 @@ case "$mes_cpu" in
         ;;
 esac
 
-trace "CCLD       ${srcdest}lib/$mes_cpu-mes-$compiler/exit-42.S" $CC\
+trace "CCLD       ${srcdest}lib/$mes_kernel/$mes_cpu-mes-$compiler/exit-42.S" $CC\
       -nostdlib\
       -g\
-      ${srcdest}lib/$mes_cpu-mes-$compiler/exit-42.S\
+      ${srcdest}lib/$mes_kernel/$mes_cpu-mes-$compiler/exit-42.S\
       -o exit-42
 
 trace "TEST       exit-42"
@@ -78,12 +78,12 @@ else
     stage0_cpu_flag="--architecture $stage0_cpu";
 fi
 
-trace "HEX2       ${srcdest}lib/$mes_cpu-mes/elf$mes_bits-0exit-42.hex2" $HEX2\
+trace "HEX2       ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-0exit-42.hex2" $HEX2\
       --LittleEndian\
       $stage0_cpu_flag\
       --BaseAddress 0x1000000\
-      -f ${srcdest}lib/$mes_cpu-mes/elf$mes_bits-0header.hex2\
-      -f ${srcdest}lib/$mes_cpu-mes/elf$mes_bits-0exit-42.hex2\
+      -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-0header.hex2\
+      -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-0exit-42.hex2\
       --exec_enable\
       -o 0exit-42
 
@@ -92,13 +92,13 @@ trace "TEST       0exit-42"
 [ $r != 42 ] && echo "  => $r"
 [ $r = 42 ]
 
-trace "HEX2       ${srcdest}lib/$mes_cpu-mes/elf$mes_bits-body-exit-42.hex2" $HEX2\
+trace "HEX2       ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-body-exit-42.hex2" $HEX2\
       --LittleEndian\
       $stage0_cpu_flag\
       --BaseAddress 0x1000000\
-      -f ${srcdest}lib/$mes_cpu-mes/elf$mes_bits-header.hex2\
-      -f ${srcdest}lib/$mes_cpu-mes/elf$mes_bits-body-exit-42.hex2\
-      -f ${srcdest}lib/$mes_cpu-mes/elf$mes_bits-footer-single-main.hex2\
+      -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-header.hex2\
+      -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-body-exit-42.hex2\
+      -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-footer-single-main.hex2\
       --exec_enable\
       -o body-exit-42
 
@@ -108,10 +108,10 @@ trace "TEST       body-exit-42"
 [ $r = 42 ]
 
 ### FIXME: c&p from exit-42
-trace "CCLD       ${srcdest}lib/$mes_cpu-mes-$compiler/hello-mes.S" $CC\
+trace "CCLD       ${srcdest}lib/$mes_kernel/$mes_cpu-mes-$compiler/hello-mes.S" $CC\
       -nostdlib\
       -g\
-      ${srcdest}lib/$mes_cpu-mes-$compiler/hello-mes.S\
+      ${srcdest}lib/$mes_kernel/$mes_cpu-mes-$compiler/hello-mes.S\
       -o hello-mes
 
 trace "TEST       hello-mes"
@@ -119,12 +119,12 @@ trace "TEST       hello-mes"
 [ $r != 0 ] && echo "  => $r"
 [ $r = 0 ]
 
-trace "HEX2       ${srcdest}lib/$mes_cpu-mes/elf$mes_bits-0hello-mes.hex2" $HEX2\
+trace "HEX2       ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-0hello-mes.hex2" $HEX2\
       --LittleEndian\
       $stage0_cpu_flag\
       --BaseAddress 0x1000000\
-      -f ${srcdest}lib/$mes_cpu-mes/elf$mes_bits-0header.hex2\
-      -f ${srcdest}lib/$mes_cpu-mes/elf$mes_bits-0hello-mes.hex2\
+      -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-0header.hex2\
+      -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-0hello-mes.hex2\
       --exec_enable\
       -o 0hello-mes
 
@@ -133,13 +133,13 @@ trace "TEST       0hello-mes"
 [ $r != 0 ] && echo "  => $r"
 [ $r = 0 ]
 
-trace "HEX2       ${srcdest}lib/$mes_cpu-mes/elf$mes_bits-body-hello-mes.hex2" $HEX2\
+trace "HEX2       ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-body-hello-mes.hex2" $HEX2\
       --LittleEndian\
       $stage0_cpu_flag\
       --BaseAddress 0x1000000\
-      -f ${srcdest}lib/$mes_cpu-mes/elf$mes_bits-header.hex2\
-      -f ${srcdest}lib/$mes_cpu-mes/elf$mes_bits-body-hello-mes.hex2\
-      -f ${srcdest}lib/$mes_cpu-mes/elf$mes_bits-footer-single-main.hex2\
+      -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-header.hex2\
+      -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-body-hello-mes.hex2\
+      -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-footer-single-main.hex2\
       --exec_enable\
       -o body-hello-mes
 
index 36dbf1bfb0d182165a1cb827045481f7b3f90d14..db4c6436a9b725401a423b72a01e17f26f290e30 100644 (file)
@@ -97,6 +97,7 @@ mkdir -p $DESTDIR$libdir
 mkdir -p $DESTDIR$pkgdatadir
 tar -cf- -C ${srcdir}/include . | tar -${v}xf- -C $DESTDIR$includedir
 tar -cf- -C ${srcdir}/lib $mes_cpu-mes | tar -${v}xf- -C $DESTDIR$libdir
+tar -cf- -C ${srcdir}/lib $mes_kernel/$mes_cpu-mes | tar -${v}xf- -C $DESTDIR$libdir
 if test -z "$srcdest"; then
     tar -cf- $__exclude_go module | tar -${v}xf- -C $DESTDIR$pkgdatadir
 else
index b7ac05a2d758b55840a45ceed99c5c9bb9ab6f2d..e66e12f627e6ffdb5ca25e5317f81f1d14aba7d7 100755 (executable)
--- a/configure
+++ b/configure
@@ -516,12 +516,11 @@ Some influential environment variables:
            (mes-bits (if (member mes-cpu '("x86_64")) "64"
                          "32"))
            (mes-libc (if system-libc? "system" "mes"))
-
-           (kernel-list (filter (compose not (cut member <> '("pc" "unknown"))) (cdr host-type-list)))
-           (mes-kernel (cond ((or (equal? '("linux" "gnu") kernel-list)
-                                  (equal? "linux" (car kernel-list))) "linux")
-                             ((equal? '( "gnu") kernel-list) "gnu")
-                             (else "unknown")))
+           (mes-kernel (car (filter
+                             (compose not
+                                      (cut member <> '("pc" "portbld" "unknown")))
+                             (cdr host-type-list))))
+           (mes-kernel (if (string-prefix? "freebsd" mes-kernel) "freebsd" mes-kernel))
            (compiler (if gcc? "gcc" "mescc"))
            (mes-system (string-join (list mes-cpu mes-kernel "mes") "-"))
            (bash (or (and (file-exists? "/bin/bash") "/bin/bash")
diff --git a/lib/linux/x86-mes-gcc/exit-42.S b/lib/linux/x86-mes-gcc/exit-42.S
new file mode 100644 (file)
index 0000000..2ab7b17
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * 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/>.
+ */
+
+/** Commentary: */
+
+/* Using gdb, esp. GUD in GNU Emacs is recommended
+M-x gdb-display-disassembly-buffer
+M-x gdb-display-io-buffer
+set disassemble-next-line on
+break _start
+run
+info registers
+si
+p/x $eax
+RET
+...
+*/
+
+/** Code: */
+
+SYS_exit = 1                   /* Linux syscall: exit.  */
+       .globl _start           /* Magic linker symbol: --entry-address.  */
+
+       .text                   /* Program text. */
+_start:
+       mov     $SYS_exit,%eax  /* System call function: exit, in %eax.  */
+       mov     $42,%ebx        /* First parameter: exit status, in %ebx. */
+       int     $0x80           /* Call system.  */
+       hlt                     /* Should not be reached.  */
diff --git a/lib/linux/x86-mes-gcc/hello-mes.S b/lib/linux/x86-mes-gcc/hello-mes.S
new file mode 100644 (file)
index 0000000..88b55fe
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * 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/>.
+ */
+
+/** Commentary: */
+
+/* Using gdb, esp. GUD in GNU Emacs is recommended
+M-x gdb-display-disassembly-buffer
+M-x gdb-display-io-buffer
+set disassemble-next-line on
+break _start
+run
+info registers
+si
+p/x $eax
+RET
+...
+*/
+
+/** Code: */
+
+SYS_exit       = 1             /* Linux syscalls.  */
+SYS_write      = 4
+stdout         = 1             /* File discriptor */
+       .globl _start           /* Magic linker symbol: --entry-address.  */
+
+       .text                   /* Program text. */
+_start:
+       mov     $SYS_write,%eax /* System call function: write, in %eax.  */
+       mov     $stdout,%ebx    /* 1st parameter: file descriptor, in %ebx. */
+       mov     $hello,%ecx     /* 2nd parameter: address, in %ecx. */
+       mov     $(bye-hello),%edx       /* 3rd parameter: byte count %edx. */
+       int     $0x80           /* Call system.  */
+
+       mov     $SYS_exit,%eax  /* System call function: exit, in %eax.  */
+       mov     $0,%ebx         /* 1st parameter: exit status, in %ebx. */
+       int     $0x80           /* Call system.  */
+       hlt                     /* Should not be reached.  */
+
+       .data
+hello: .ascii  "Hello, GNU Mes!\n"
+bye:   .byte   0
diff --git a/lib/linux/x86-mes-mescc/exit-42.S b/lib/linux/x86-mes-mescc/exit-42.S
new file mode 100644 (file)
index 0000000..9a3a808
--- /dev/null
@@ -0,0 +1,28 @@
+### 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/>.
+
+DEFINE sys_exit 01
+
+:main
+       mov____$i8,%eax !42
+       mov____%eax,%ebx
+       mov____$i8,%eax sys_exit
+       int____$0x80
+
+:ELF_data
+:HEX2_data
diff --git a/lib/linux/x86-mes-mescc/hello-mes.S b/lib/linux/x86-mes-mescc/hello-mes.S
new file mode 100644 (file)
index 0000000..3b26c77
--- /dev/null
@@ -0,0 +1,40 @@
+### 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/>.
+
+DEFINE sys_exit  01
+DEFINE sys_write 04
+
+:main
+       mov____$i8,%eax !end_hello_message>hello_message
+       mov____%eax,%ecx
+       mov____$i8,%eax !0
+       mov____%eax,%ebx
+       mov____$i8,%eax sys_write
+       int____$0x80
+
+       mov____$i8,%eax !0
+       mov____%eax,%ebx
+       mov____$i8,%eax sys_exit
+       int____$0x80
+
+:ELF_data
+:hello_message
+"Hello, GNU Mes!
+"
+:end_hello_message
+:HEX2_data
diff --git a/lib/linux/x86-mes/elf32-0exit-42.hex2 b/lib/linux/x86-mes/elf32-0exit-42.hex2
new file mode 100644 (file)
index 0000000..4d3b6a0
--- /dev/null
@@ -0,0 +1,34 @@
+### GNU Mes --- Maxwell Equations of Software
+### Copyright © 2017,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/>.
+
+### Commentary:
+
+# elf32-exit-42.hex2: `exit 42' for i686-linux written in hex2 assembly,
+# for usage with elf32-0header.hex2.  This produces a 112-byte binary
+# (70 hex).  Inspiration was taken from GNU Gcc output of exit-42.S.
+
+### Code:
+
+# @60
+:ELF_text
+b8 01 00 00 00                 # mov    $1, %eax
+bb 2a 00 00 00                 # mov    $42, %ebx
+cd 80                          # int    $0x80
+f4                             # hlt
+00 00 00                       # align to @70
+:ELF_end
diff --git a/lib/linux/x86-mes/elf32-0header.hex2 b/lib/linux/x86-mes/elf32-0header.hex2
new file mode 100644 (file)
index 0000000..c8a6c7f
--- /dev/null
@@ -0,0 +1,85 @@
+### Copyright (C) 2016 Jeremiah Orians
+### Copyright (C) 2017,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/>.
+
+### Commentary:
+
+# elf32-0header.hex2: Simplest 32 bit elf header in hex2.  Only a text
+# segment, no data segment, no symbol tables.
+
+# stage0's hex2 format for x86
+#    !<label>          1 byte relative
+#    $<label>          2 byte address
+#    @<label>          2 byte relative
+#    &<label>          4 byte address
+#    %<label>          4 byte relative
+#    local_<label>     function-local
+#    string_<index>    string #<index>
+
+### Code:
+
+:ELF_base
+7F 45 4C 46                    # e_ident[EI_MAG0-3] ELF's magic number
+
+01                             # e_ident[EI_CLASS] Indicating 32 bit
+01                             # e_ident[EI_DATA] Indicating little endianness
+01                             # e_ident[EI_VERSION] Indicating original elf
+
+00                             # e_ident[EI_OSABI] Set at 0 because none cares
+00                             # e_ident[EI_ABIVERSION] See above
+
+00 00 00 00 00 00 00           # e_ident[EI_PAD]
+
+02 00                          # e_type Indicating Executable
+03 00                          # e_machine Indicating 32bit x86
+01 00 00 00                    # e_version Indicating original elf
+
+&ELF_text                      # e_entry Address of the entry point
+%ELF_program_headers>ELF_base  # e_phoff Address of program header table
+00 00 00 00                    # e_shoff Address of section header table
+
+00 00 00 00                    # e_flags
+
+34 00                          # e_ehsize Indicating our 52 Byte header
+
+20 00                          # e_phentsize size of a program header table
+01 00                          # e_phnum number of entries in program table
+
+00 00                          # e_shentsize size of a section header table
+00 00                          # e_shnum number of entries in section table
+
+00 00                          # e_shstrndx index of the section names
+
+# @34
+00 00 00 00
+00 00 00 00
+00 00 00 00
+
+# @40
+:ELF_program_headers
+:ELF_program_header__text
+01 00 00 00                    # ph_type: PT-LOAD = 1
+00 00 00 00                    # ph_offset
+&ELF_base                      # ph_vaddr
+&ELF_base                      # ph_physaddr
+%ELF_end>ELF_base              # ph_filesz
+%ELF_end>ELF_base              # ph_memsz
+07 00 00 00                    # ph_flags: PF-X|PF-W|PF-R = 7
+01 00 00 00                    # ph_align
+
+# @60
+:ELF_text
diff --git a/lib/linux/x86-mes/elf32-0hello-mes.hex2 b/lib/linux/x86-mes/elf32-0hello-mes.hex2
new file mode 100644 (file)
index 0000000..7c07d25
--- /dev/null
@@ -0,0 +1,53 @@
+### GNU Mes --- Maxwell Equations of Software
+### Copyright © 2017,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/>.
+
+### Commentary:
+
+# elf32-0hello-mes.hex2: `Hello, GNU Mes!' for i686-linux written in
+# hex2 assembly, for usage with elf32-0header.hex2.  This produces a
+# 160-byte binary (a0 hex).  Inspiration was taken from GNU Gcc output
+# of hello-mes.S.
+
+### Code:
+
+# @60
+:ELF_text
+
+                               # print <hello>
+b8 04 00 00 00                 # mov    $4,%eax
+bb 00 00 00 00                 # mov    $1,%ebx
+b9 &hello                      # mov    $hello,%ecx
+ba %bye>hello                  # mov    $(bye-hello),%edx
+cd 80                          # int    $0x80
+
+                               # exit 0
+b8 01 00 00 00                 # mov    $1,%eax
+bb 00 00 00 00                 # mov    $0,%ebx
+cd 80                          # int    $0x80
+f4                             # hlt
+
+00 00 00 00 00 00 00 00 00 00  # align to @90
+00 00 00
+
+# @90
+:ELF_data
+:hello
+48 65 6c 6c 6f 2c 20 47        # Hello, G
+4e 55 20 4d 65 73 21 0a        # NU Mes!\n
+:bye
+:ELF_end
diff --git a/lib/linux/x86-mes/elf32-body-exit-42.hex2 b/lib/linux/x86-mes/elf32-body-exit-42.hex2
new file mode 100644 (file)
index 0000000..98c12cb
--- /dev/null
@@ -0,0 +1,50 @@
+### GNU Mes --- Maxwell Equations of Software
+### Copyright © 2017,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/>.
+
+### Commentary:
+
+# elf32-body-exit-42.hex2: `exit 42' for i686-linux written in hex2
+# assembly, for usage with generic elf32-header.hex2 and
+# elf32-footer-single-main.hex.
+
+# This ELF binary contains a symbol table, which means that objdump and
+# gdb can be used to inspect and debug.
+
+### Code:
+
+# @200
+:ELF_text
+:_start
+e8 %main                       # call   +11 <main>
+00 00 00
+00 00 00 00
+00 00 00 00
+
+# @210
+:main
+bb 2a 00 00 00                 # mov    $42,%ebx
+b8 01 00 00 00                 # mov    $0x1,%eax
+cd 80                          # int    $0x80
+f4                             # hlt
+
+00 00 00                       # align
+
+# @220
+:ELF_data
+65 78 69 74 34 32 20 64 61 74 61 20 68 65 72 65 # exit42 data here"
+00
diff --git a/lib/linux/x86-mes/elf32-body-hello-mes.hex2 b/lib/linux/x86-mes/elf32-body-hello-mes.hex2
new file mode 100644 (file)
index 0000000..5741133
--- /dev/null
@@ -0,0 +1,63 @@
+### GNU Mes --- Maxwell Equations of Software
+### Copyright © 2017,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/>.
+
+### Commentary:
+
+# elf32-body-hello-mes.hex2: `Hello, GNU Mes!' for i686-linux written in
+# hex2 assembly, for usage with generic elf32-header.hex2 and
+# elf32-footer-single-main.hex.
+
+# This ELF binary contains a symbol table which means that objdump and
+# gdb can be used to inspect and debug.
+
+### Code:
+
+# @200
+:ELF_text
+:_start
+e8 %main                       # call   +11 <main>
+00 00 00
+00 00 00 00
+00 00 00 00
+
+# @210
+:main
+                               # print <hello>
+b8 04 00 00 00                 # mov    $4, %eax
+bb 00 00 00 00                 # mov    $1, %ebx
+b9 &hello                      # mov    $hello,%ecx
+ba %bye>hello                  # mov    $(bye-hello),%edx
+cd 80                          # int    $0x80
+
+                               # exit 0
+b8 01 00 00 00                 # mov    $0x1,%eax
+bb 00 00 00 00                 # mov    $0,%ebx
+cd 80                          # int    $0x80
+f4                             # hlt
+
+00 00 00 00 00 00 00 00 00 00  # align to @240
+00 00 00
+
+# @240
+:ELF_data
+:hello
+48 65 6c 6c 6f 2c 20 47        # Hello, G
+4e 55 20 4d 65 73 21 0a        # NU Mes!\n
+
+:bye
+00
diff --git a/lib/linux/x86-mes/elf32-footer-single-main.hex2 b/lib/linux/x86-mes/elf32-footer-single-main.hex2
new file mode 100644 (file)
index 0000000..5695055
--- /dev/null
@@ -0,0 +1,64 @@
+### Copyright (C) 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+### This file is part of stage0.
+###
+### stage0 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.
+###
+### stage0 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 stage0.  If not, see <http://www.gnu.org/licenses/>.
+
+### stage0's hex2 format for x86
+###    !<label>          1 byte relative
+###    $<label>          2 byte address
+###    @<label>          2 byte relative
+###    &<label>          4 byte address
+###    %<label>          4 byte relative
+###    local_<label>     function-local
+###    string_<index>    string #<index>
+
+### elf32-footer-single-main.hex2: 32 bit elf footer in hex2 for single main
+
+# @230
+
+:ELF_str
+00                             # 0
+:ELF_str__start
+5f 73 74 61 72 74 00           # _start
+:ELF_str__main
+6d 61 69 6e 00                 # main
+
+00 00 00
+
+# @240
+:ELF_sym
+00 00 00 00                    # st-name
+00 00 00 00                    # st-offset: &_start - BaseAddress
+00 00 00 00                    # st-len   : &main - _start
+00                             # st-info = stt-func= 2
+00                             # st-other
+01 00                          # st-shndx: 1
+
+# _start
+%ELF_str__start>ELF_str        # st-name
+&_start
+10 00 00 00                    # st-len   : &main - _start
+02                             # st-info = stt-func= 2
+00                             # st-other
+01 00                          # st-shndx: 1
+
+# main
+%ELF_str__main>ELF_str         # st-name
+&main
+10 00 00 00                    # st-len   : &ELF_data - main
+02                             # st-info = stt-func= 2
+00                             # st-other
+01 00                          # st-shndx: 1
+
+:ELF_end
diff --git a/lib/linux/x86-mes/elf32-header.hex2 b/lib/linux/x86-mes/elf32-header.hex2
new file mode 100644 (file)
index 0000000..2624453
--- /dev/null
@@ -0,0 +1,225 @@
+### Copyright (C) 2016 Jeremiah Orians
+### Copyright (C) 2017,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/>.
+
+### Commentary:
+
+# elf32-header.hex2: 32 bit elf header in hex2, with text segment, data
+# segment and symbol tables.
+
+# stage0's hex2 format for x86
+#    !<label>          1 byte relative
+#    $<label>          2 byte address
+#    @<label>          2 byte relative
+#    &<label>          4 byte address
+#    %<label>          4 byte relative
+#    local_<label>     function-local
+#    string_<index>    string #<index>
+
+### Code:
+
+:ELF_base
+7F 45 4C 46                    # e_ident[EI_MAG0-3] ELF's magic number
+
+01                             # e_ident[EI_CLASS] Indicating 32 bit
+01                             # e_ident[EI_DATA] Indicating little endianness
+01                             # e_ident[EI_VERSION] Indicating original elf
+
+00                             # e_ident[EI_OSABI] Set at 0 because none cares
+00                             # e_ident[EI_ABIVERSION] See above
+
+00 00 00 00 00 00 00           # e_ident[EI_PAD]
+
+02 00                          # e_type Indicating Executable
+03 00                          # e_machine Indicating 32bit x86
+01 00 00 00                    # e_version Indicating original elf
+
+&ELF_text                      # e_entry Address of the entry point
+%ELF_program_headers>ELF_base  # e_phoff Address of program header table
+%ELF_section_headers>ELF_base  # e_shoff Address of section header table
+
+00 00 00 00                    # e_flags
+
+34 00                          # e_ehsize Indicating our 52 Byte header
+
+20 00                          # e_phentsize size of a program header table
+01 00                          # e_phnum number of entries in program table
+
+28 00                          # e_shentsize size of a section header table
+07 00                          # e_shnum number of entries in section table
+
+04 00                          # e_shstrndx index of the section names
+
+# @34
+00 00 00 00
+00 00 00 00
+00 00 00 00
+
+# @40
+:ELF_program_headers
+:ELF_program_header__text
+01 00 00 00                    # ph_type: PT-LOAD = 1
+00 00 00 00                    # ph_offset
+&ELF_base                      # ph_vaddr
+&ELF_base                      # ph_physaddr
+%ELF_end>ELF_base              # ph_filesz
+%ELF_end>ELF_base              # ph_memsz
+07 00 00 00                    # ph_flags: PF-X|PF-W|PF-R = 7
+01 00 00 00                    # ph_align
+
+# @60
+#:ELF_program_header__data     # NOT USED
+                               # FIXME: linux 4.17 does not allow this overlap
+                               #    Uhuuh, elf segment at 0000000001000000
+                               #    requested but the memory is mapped already
+01 00 00 00                    # ph_type: PT-LOAD = 1
+00 00 00 00                    # ph_offset
+&ELF_base                      # ph_vaddr
+&ELF_base                      # ph_physaddr
+%ELF_end>ELF_base              # ph_filesz
+%ELF_end>ELF_base              # ph_memsz
+07 00 00 00                    # ph_flags: PF-X|PF-W|PF-R = 7
+01 00 00 00                    # ph_align
+
+# @80
+:ELF_comment
+4d 45 53 00                     # MES
+00 00 00 00                     # align
+00 00 00 00
+00 00 00 00
+
+4d 45 53 00                     # MES
+00 00 00 00                     # align
+00 00 00 00
+00 00 00 00
+
+# @a0
+:ELF_shstr
+00
+:ELF_shstr__text
+2e 74 65 78 74 00               # .text
+:ELF_shstr__data
+2e 64 61 74 61 00               # .data
+:ELF_shstr__comment
+2e 63 6f 6d 6d 65 6e 74 00      # .comment
+:ELF_shstr__shstr
+2e 73 68 73 74 72 74 61 62 00   # .shstrtab
+:ELF_shstr__sym
+2e 73 79 6d 74 61 62 00         # .symtab
+:ELF_shstr__str
+2e 73 74 72 74 61 62 00         # .strtab
+
+# @d0
+
+:ELF_section_headers
+00 00 00 00                     # sh_name
+00 00 00 00                     # sh_type
+00 00 00 00                     # sh_flags
+00 00 00 00                     # sh_addr
+00 00 00 00                     # sh_offset
+00 00 00 00                     # sh_length
+00 00 00 00                     # sh_link
+00 00 00 00                     # sh_info
+01 00 00 00                     # sh_1?
+00 00 00 00                     # sh_entsize
+
+## FIXME: M0 for calculations?
+:ELF_section_header_text
+%ELF_shstr__text>ELF_shstr      # sh_name
+01 00 00 00                     # sh_type = SHT_PROGBITS = 1
+06 00 00 00                     # sh_flags = SHF-ALLOC|SHF-EXEC =2 | 4 = 6
+&ELF_text                       # sh_addr
+%ELF_text>ELF_base              # sh_offset
+%ELF_data>ELF_text              # sh_length
+00 00 00 00                     # sh_link
+00 00 00 00                     # sh_info
+01 00 00 00                     # sh_1?
+00 00 00 00                     # sh_entsize
+
+:ELF_section_header_data
+%ELF_shstr__data>ELF_shstr     # sh_name
+01 00 00 00                    # sh_type = SHT_PROGBITS = 1
+03 00 00 00                    # sh_flags = SHF-WRITE|SHF-ALLOC = 1 | 2 = 3
+&ELF_data                      # sh_addr
+%ELF_data>ELF_base             # sh_offset
+%ELF_sym>ELF_data              # sh_length
+00 00 00 00                    # sh_link
+00 00 00 00                    # sh_info
+01 00 00 00                    # sh_1?
+00 00 00 00                    # sh_entsize
+
+:ELF_section_header_comment
+%ELF_shstr__comment>ELF_shstr  # sh_name
+01 00 00 00                    # sh_type = SHT_PROGBITS = 1
+00 00 00 00                    # sh_flags
+&ELF_comment                   # sh_addr
+%ELF_comment>ELF_base          # sh_offset
+%ELF_shstr>ELF_comment         # sh_length
+00 00 00 00                    # sh_link
+00 00 00 00                    # sh_info
+01 00 00 00                    # sh_1?
+00 00 00 00                    # sh_entsize
+
+:ELF_section_header_shstr
+%ELF_shstr__shstr>ELF_shstr    # sh_name
+03 00 00 00                    # sh_type: str-sht-strtab
+00 00 00 00                    # sh_flags
+&ELF_shstr                     # sh_addr
+%ELF_shstr>ELF_base            # sh_offset
+%ELF_section_headers>ELF_shstr # sh_length
+00 00 00 00                    # sh_link
+00 00 00 00                    # sh_info
+01 00 00 00                    # sh_1?
+00 00 00 00                    # sh_entsize
+
+:ELF_section_header_sym
+%ELF_shstr__sym>ELF_shstr      # sh_name
+02 00 00 00                    # sh_type: str-sht-symtab
+00 00 00 00                    # sh_flags
+&ELF_sym                       # sh_addr
+%ELF_sym>ELF_base              # sh_offset
+%ELF_end>ELF_sym               # sh_length
+06 00 00 00                    # sh_link:6
+00 00 00 00                    # sh_info
+01 00 00 00                    # sh_1?
+10 00 00 00                    # sh_entsize
+
+:ELF_section_header_str
+%ELF_shstr__str>ELF_shstr      # sh_name
+03 00 00 00                    # sh_type: str-sht-strtab
+00 00 00 00                    # sh_flags
+&ELF_str                       # sh_addr
+%ELF_str>ELF_base              # sh_offset
+%ELF_sym>ELF_str               # sh_length
+00 00 00 00                    # sh_link
+00 00 00 00                    # sh_info
+01 00 00 00                    # sh_1?
+00 00 00 00                    # sh_entsize
+
+# @1e8
+00 00 00 00  # align
+00 00 00 00
+
+# @1f0
+
+00 00 00 00  # align
+00 00 00 00
+00 00 00 00
+00 00 00 00
+
+# @200
+:ELF_text
diff --git a/lib/linux/x86_64-mes-gcc/exit-42.S b/lib/linux/x86_64-mes-gcc/exit-42.S
new file mode 100644 (file)
index 0000000..0e45bd0
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * 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/>.
+ */
+
+/** Commentary: */
+
+/* Using gdb, esp. GUD in GNU Emacs is recommended
+M-x gdb-display-disassembly-buffer
+M-x gdb-display-io-buffer
+set disassemble-next-line on
+break _start
+run
+info registers
+si
+p/x $rax
+RET
+...
+*/
+
+/** Code: */
+
+SYS_exit = 0x3c                        /* Linux syscall: exit.  */
+       .globl _start           /* Magic linker symbol: --entry-address.  */
+
+       .text                   /* Program text. */
+_start:
+       movabs  $SYS_exit,%rax  /* System call function: exit, in %rax.  */
+       movabs  $42,%rdi        /* First parameter: exit status, in %rdi. */
+       syscall                 /* Call system.  */
+       hlt                     /* Should not be reached.  */
diff --git a/lib/linux/x86_64-mes-gcc/hello-mes.S b/lib/linux/x86_64-mes-gcc/hello-mes.S
new file mode 100644 (file)
index 0000000..ba9c89c
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * 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/>.
+ */
+
+/** Commentary: */
+
+/* Using gdb, esp. GUD in GNU Emacs is recommended
+M-x gdb-display-disassembly-buffer
+M-x gdb-display-io-buffer
+set disassemble-next-line on
+break _start
+run
+info registers
+si
+p/x $rax
+RET
+...
+*/
+
+/** Code: */
+
+SYS_exit       = 0x3c          /* Linux syscalls.  */
+SYS_write      = 0x01
+stdout         = 1             /* File discriptor */
+       .globl _start           /* Magic linker symbol: --entry-address.  */
+
+       .text                   /* Program text. */
+_start:
+       movabs  $SYS_write,%rax /* System call function: write, in %rax.  */
+       movabs  $stdout,%rdi    /* 1st parameter: file descriptor, in %rdi. */
+       movabs  $hello,%rsi     /* 2nd parameter: address, in %rsi. */
+       movabs  $(bye-hello),%rdx       /* 3rd parameter: byte count %rdx. */
+       syscall                 /* Call system.  */
+
+       movabs  $SYS_exit,%rax  /* System call function: exit, in %rax.  */
+       movabs  $0,%rdi         /* 1st parameter: exit status, in %rdi. */
+       syscall                 /* Call system.  */
+       hlt                     /* Should not be reached.  */
+
+       .data
+hello: .ascii  "Hello, GNU Mes!\n"
+bye:   .byte   0
diff --git a/lib/linux/x86_64-mes-mescc/exit-42.S b/lib/linux/x86_64-mes-mescc/exit-42.S
new file mode 100644 (file)
index 0000000..8e8aa06
--- /dev/null
@@ -0,0 +1,28 @@
+### 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/>.
+
+DEFINE sys_exit 0x3c
+
+:main
+       mov____$i8,%eax !42
+       mov____%rax,%rbx
+       mov____$i8,%eax sys_exit
+       syscall
+
+:ELF_data
+:HEX2_data
diff --git a/lib/linux/x86_64-mes-mescc/hello-mes.S b/lib/linux/x86_64-mes-mescc/hello-mes.S
new file mode 100644 (file)
index 0000000..0dbe5a7
--- /dev/null
@@ -0,0 +1,40 @@
+### 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/>.
+
+DEFINE sys_exit  0x3c
+DEFINE sys_write 0x01
+
+:main
+       mov____$i8,%eax !end_hello_message>hello_message
+       mov____%rax,%rcx
+       mov____$i8,%eax !0
+       mov____%rax,%rbx
+       mov____$i8,%eax sys_write
+       syscall
+
+       mov____$i8,%eax !0
+       mov____%rax,%rbx
+       mov____$i8,%eax sys_exit
+       syscall
+
+:ELF_data
+:hello_message
+"Hello, GNU Mes!
+"
+:end_hello_message
+:HEX2_data
diff --git a/lib/linux/x86_64-mes/elf64-0exit-42.hex2 b/lib/linux/x86_64-mes/elf64-0exit-42.hex2
new file mode 100644 (file)
index 0000000..5be3faf
--- /dev/null
@@ -0,0 +1,36 @@
+### GNU Mes --- Maxwell Equations of Software
+### Copyright © 2017,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/>.
+
+### Commentary:
+
+# elf64-exit-42.hex2: `exit 42' for x86_64-linux written in hex2
+# assembly, for usage with elf64-0header.hex2.  This produces a 160-byte
+# binary (a0 hex).  Inspiration was taken from GNU Gcc output of
+# exit-42.S.
+
+### Code:
+
+# @80
+:ELF_text
+48 b8 3c 00 00 00 00 00 00 00  # movabs $0x3c,%rax
+48 bf 2a 00 00 00 00 00 00 00  # movabs $42,%rdi
+0f 05                          # syscall
+f4                             # hlt
+
+00 00 00 00 00 00 00 00 00     # align to @a0
+:ELF_end
diff --git a/lib/linux/x86_64-mes/elf64-0header.hex2 b/lib/linux/x86_64-mes/elf64-0header.hex2
new file mode 100644 (file)
index 0000000..56aaa05
--- /dev/null
@@ -0,0 +1,83 @@
+### Copyright (C) 2016 Jeremiah Orians
+### Copyright (C) 2017,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/>.
+
+### Commentary:
+
+# elf64-0header.hex2: Simplest 64 bit elf header in hex2.  Only a text
+# segment, no data segment, no symbol tables.
+
+# stage0's hex2 format for x86_64
+#    !<label>          1 byte relative
+#    $<label>          2 byte address
+#    @<label>          2 byte relative
+#    &<label>          4 byte address
+#    %<label>          4 byte relative
+#    local_<label>     function-local
+#    string_<index>    string #<index>
+
+### Code:
+
+: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
+
+00                             # e_ident[EI_OSABI] Set at 0 because none cares
+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
+
+&ELF_text 00 00 00 00          # e_entry Address of the entry point
+%ELF_program_headers>ELF_base  # e_phoff Address of program header table
+  00 00 00 00
+
+00 00 00 00 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
+
+00 00                          # e_shentsize size of a section header table
+00 00                          # e_shnum number of entries in section table
+
+00 00                          # e_shstrndx index of the section names
+
+# @40
+: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        # p_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
+
+00 00 00 00 00 00 00 00        # align to @80
+# @80
+:ELF_text
diff --git a/lib/linux/x86_64-mes/elf64-0hello-mes.hex2 b/lib/linux/x86_64-mes/elf64-0hello-mes.hex2
new file mode 100644 (file)
index 0000000..22ae310
--- /dev/null
@@ -0,0 +1,52 @@
+### GNU Mes --- Maxwell Equations of Software
+### Copyright © 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/>.
+
+### Commentary:
+
+# elf64-hello-mes.hex2: `Hello, GNU Mes!' for x86_64-linux written in
+# hex2 assembly, for usage with elf64-0header.hex2.  This produces a
+# 224-byte binary (e0 hex).  Inspiration was taken from GNU Gcc output
+# of hello-mes.S.
+
+### Code:
+
+# @80
+:ELF_text
+                               # print <hello>
+48 b8 01 00 00 00 00 00 00 00  # movabs $1,%rax
+48 bf 01 00 00 00 00 00 00 00  # movabs $1,%rdi
+48 be &hello 00 00 00 00       # movabs $<hello>,%rsi
+48 ba %bye>hello 00 00 00 00   # mov    $(bye-hello),%rdx
+0f 05                          # syscall
+
+                               # exit 0
+48 b8 3c 00 00 00 00 00 00 00  # movabs $0x3c,%rax
+48 bf 00 00 00 00 00 00 00 00  # movabs $0,%rdi
+0f 05                          # syscall
+f4                             # hlt
+
+00 00 00 00 00 00 00 00 00     # align to @d0
+00 00 00 00 00 00
+
+# @d0
+:ELF_data
+:hello
+48 65 6c 6c 6f 2c 20 47        # Hello, G
+4e 55 20 4d 65 73 21 0a        # NU Mes!\n
+:bye
+:ELF_end
diff --git a/lib/linux/x86_64-mes/elf64-body-exit-42.hex2 b/lib/linux/x86_64-mes/elf64-body-exit-42.hex2
new file mode 100644 (file)
index 0000000..c427b40
--- /dev/null
@@ -0,0 +1,51 @@
+### GNU Mes --- Maxwell Equations of Software
+### Copyright © 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/>.
+
+### Commentary:
+
+# elf64-body-exit-42.hex2: `exit 42' for x86_64-linux written in hex2
+# assembly, for usage with generic elf64-header.hex2 and
+# elf64-footer-single-main.hex.
+
+# This ELF binary contains a symbol table, which means that objdump and
+# gdb can be used to inspect and debug.
+
+### Code:
+
+# @300
+:ELF_text
+:_start
+# exit(42)
+e8 %main                       # call  +11 <main>
+00 00 00
+00 00 00 00
+00 00 00 00
+
+# @310
+:main
+48 b8 3c 00 00 00 00 00 00 00  # movabs $0x3c,%rax
+48 bf 2a 00 00 00 00 00 00 00  # movabs $42,%rdi
+0f 05                          # syscall
+f4                             # hlt
+
+00 00 00 00 00 00 00 00 00     # align to 330
+
+# @330
+:ELF_data
+65 78 69 74 34 32 20 64 61 74 61 20 68 65 72 65 # exit42 data here"
+00
diff --git a/lib/linux/x86_64-mes/elf64-body-hello-mes.hex2 b/lib/linux/x86_64-mes/elf64-body-hello-mes.hex2
new file mode 100644 (file)
index 0000000..19f3410
--- /dev/null
@@ -0,0 +1,63 @@
+### GNU Mes --- Maxwell Equations of Software
+### Copyright © 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/>.
+
+### Commentary:
+
+# elf64-body-hello-mes.hex2: `Hello, GNU Mes!' for x86_64-linux written
+# in hex2 assembly, for usage with generic elf64-header.hex2 and
+# elf64-footer-single-main.hex.
+
+# This ELF binary contains a symbol table which means that objdump and
+# gdb can be used to inspect and debug.
+
+### Code:
+
+# @300
+:ELF_text
+:_start
+# exit(42)
+e8 %main                       # call  +11 <main>
+00 00 00
+00 00 00 00
+00 00 00 00
+
+# @310
+:main
+                               # print <hello>
+48 b8 01 00 00 00 00 00 00 00  # movabs $1,%rax
+48 bf 01 00 00 00 00 00 00 00  # movabs $1,%rdi
+48 be &hello 00 00 00 00       # movabs $<hello>,%rsi
+48 ba %bye>hello 00 00 00 00   # mov    $(bye-hello),%rdx
+0f 05                          # syscall
+
+                               # exit 0
+48 b8 3c 00 00 00 00 00 00 00  # movabs $0x3c,%rax
+48 bf 00 00 00 00 00 00 00 00  # movabs $0,%rdi
+0f 05                          # syscall
+f4                             # hlt
+
+00 00 00 00 00 00 00 00 00     # align to @360
+00 00 00 00 00 00
+
+# @360
+:ELF_data
+:hello
+48 65 6c 6c 6f 2c 20 47        # Hello, G
+4e 55 20 4d 65 73 21 0a        # NU Mes!\n
+:bye
+:ELF_end
diff --git a/lib/linux/x86_64-mes/elf64-footer-single-main.hex2 b/lib/linux/x86_64-mes/elf64-footer-single-main.hex2
new file mode 100644 (file)
index 0000000..0e319c3
--- /dev/null
@@ -0,0 +1,62 @@
+### Copyright (C) 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+### This file is part of stage0.
+###
+### stage0 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.
+###
+### stage0 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 stage0.  If not, see <http://www.gnu.org/licenses/>.
+
+### stage0's hex2 format for x86_64
+###    !<label>          1 byte relative
+###    $<label>          2 byte address
+###    @<label>          2 byte relative
+###    &<label>          4 byte address
+###    %<label>          4 byte relative
+###    local_<label>     function-local
+###    string_<index>    string #<index>
+
+# @230
+
+:ELF_str
+00                             # 0
+:ELF_str__start
+5f 73 74 61 72 74 00           # _start
+:ELF_str__main
+6d 61 69 6e 00                 # main
+
+00 00 00
+
+# @370
+:ELF_sym
+00 00 00 00                    # st-name
+00                             # st-info = stt-func= 2
+00                             # st-other
+01 00                          # st-shndx: 1
+00 00 00 00 00 00 00 00        # st-offset: &_start - BaseAddress
+00 00 00 00 00 00 00 00        # st-len   : &main - _start
+
+# _start
+%ELF_str__start>ELF_str        # st-name
+02                             # st-info = stt-func= 2
+00                             # st-other
+01 00                          # st-shndx: 1
+&_start 00 00 00 00
+10 00 00 00 00 00 00 00        # st-len   : &main - _start
+
+# main
+%ELF_str__main>ELF_str         # st-name
+02                             # st-info = stt-func= 2
+00                             # st-other
+01 00                          # st-shndx: 1
+&main 00 00 00 00
+10 00 00 00 00 00 00 00        # st-len   : &ELF_data - main
+
+:ELF_end
diff --git a/lib/linux/x86_64-mes/elf64-header.hex2 b/lib/linux/x86_64-mes/elf64-header.hex2
new file mode 100644 (file)
index 0000000..258e3da
--- /dev/null
@@ -0,0 +1,240 @@
+### Copyright (C) 2016 Jeremiah Orians
+### Copyright (C) 2017,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/>.
+
+### Commentary:
+
+# elf64-header.hex2: 64 bit elf header in hex2, with text segment, data
+# segment and symbol tables.
+
+# stage0's hex2 format for x86_64
+#    !<label>          1 byte relative
+#    $<label>          2 byte address
+#    @<label>          2 byte relative
+#    &<label>          4 byte address
+#    %<label>          4 byte relative
+#    local_<label>     function-local
+#    string_<index>    string #<index>
+
+### Code:
+
+: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
+
+00                             # e_ident[EI_OSABI] Set at 0 because none cares
+00                             # e_ident[EI_ABIVERSION] See above
+
+00 00 00 00 00 00 00           # e_ident[EI_PAD]
+
+# 0x10
+02 00                          # e_type Indicating Executable
+3e 00                          # e_machine Indicating AMD64
+01 00 00 00                    # e_version Indicating original elf
+
+# 0x18
+&ELF_text 00 00 00 00          # e_entry Address of the entry point
+%ELF_program_headers>ELF_base  # e_phoff Address of program header table
+  00 00 00 00
+
+%ELF_section_headers>ELF_base  # e_shoff Address of section header table
+  00 00 00 00
+
+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
+07 00                          # e_shnum number of entries in section table
+
+04 00                          # e_shstrndx index of the section names
+
+# @40
+: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        # p_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
+
+
+# @60
+#:ELF_program_header__data     # NOT USED
+                               # FIXME: linux 4.17 does not allow this overlap
+                               #    Uhuuh, elf segment at 0000000001000000
+                               #    requested but the memory is mapped already
+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
+
+# @b0
+:ELF_comment
+4d 45 53 00                     # MES
+00 00 00 00                     # align
+00 00 00 00
+00 00 00 00
+
+# @c0
+4d 45 53 00                     # MES
+00 00 00 00                     # align
+00 00 00 00
+00 00 00 00
+
+# @d0
+:ELF_shstr
+00
+:ELF_shstr__text
+2e 74 65 78 74 00               # .text
+:ELF_shstr__data
+2e 64 61 74 61 00               # .data
+:ELF_shstr__comment
+2e 63 6f 6d 6d 65 6e 74 00      # .comment
+:ELF_shstr__shstr
+2e 73 68 73 74 72 74 61 62 00   # .shstrtab
+:ELF_shstr__sym
+2e 73 79 6d 74 61 62 00         # .symtab
+:ELF_shstr__str
+2e 73 74 72 74 61 62 00         # .strtab
+
+# @100
+
+:ELF_section_headers
+00 00 00 00                     # sh_name
+00 00 00 00                     # sh_type
+00 00 00 00 00 00 00 00         # sh_flags
+00 00 00 00 00 00 00 00         # sh_addr
+00 00 00 00 00 00 00 00         # sh_offset
+00 00 00 00 00 00 00 00         # sh_length
+00 00 00 00                     # sh_link
+00 00 00 00                     # sh_info
+00 00 00 00 00 00 00 00         # sh_1?
+00 00 00 00 00 00 00 00         # sh_entsize
+
+## FIXME: M0 for calculations?
+:ELF_section_header_text
+%ELF_shstr__text>ELF_shstr      # sh_name
+01 00 00 00                     # sh_type = SHT_PROGBITS = 1
+06 00 00 00 00 00 00 00         # sh_flags = SHF-ALLOC|SHF-EXEC =2 | 4 = 6
+&ELF_text 00 00 00 00           # sh_addr
+%ELF_text>ELF_base 00 00 00 00  # sh_offset
+%ELF_data>ELF_text 00 00 00 00  # sh_length
+00 00 00 00                     # sh_link
+00 00 00 00                     # sh_info
+01 00 00 00 00 00 00 00         # sh_1?
+00 00 00 00 00 00 00 00         # sh_entsize
+
+:ELF_section_header_data
+%ELF_shstr__data>ELF_shstr     # sh_name
+01 00 00 00                    # sh_type = SHT_PROGBITS = 1
+03 00 00 00 00 00 00 00        # sh_flags = SHF-WRITE|SHF-ALLOC = 1 | 2 = 3
+&ELF_data 00 00 00 00          # sh_addr
+%ELF_data>ELF_base 00 00 00 00 # sh_offset
+%ELF_sym>ELF_data 00 00 00 00  # sh_length
+00 00 00 00                    # sh_link
+00 00 00 00                    # sh_info
+01 00 00 00 00 00 00 00        # sh_1?
+00 00 00 00 00 00 00 00        # sh_entsize
+
+:ELF_section_header_comment
+%ELF_shstr__comment>ELF_shstr  # sh_name
+01 00 00 00                    # sh_type = SHT_PROGBITS = 1
+00 00 00 00 00 00 00 00        # sh_flags
+&ELF_comment 00 00 00 00       # sh_addr
+%ELF_comment>ELF_base 00 00 00 00 # sh_offset
+%ELF_shstr>ELF_comment 00 00 00 00 # sh_length
+00 00 00 00                    # sh_link
+00 00 00 00                    # sh_info
+01 00 00 00 00 00 00 00        # sh_1?
+00 00 00 00 00 00 00 00        # sh_entsize
+
+:ELF_section_header_shstr
+%ELF_shstr__shstr>ELF_shstr    # sh_name
+03 00 00 00                    # sh_type: str-sht-strtab
+00 00 00 00 00 00 00 00        # sh_flags
+&ELF_shstr 00 00 00 00         # sh_addr
+%ELF_shstr>ELF_base 00 00 00 00 # sh_offset
+%ELF_section_headers>ELF_shstr 00 00 00 00 # sh_length
+00 00 00 00                    # sh_link
+00 00 00 00                    # sh_info
+01 00 00 00 00 00 00 00        # sh_1?
+00 00 00 00 00 00 00 00        # sh_entsize
+
+:ELF_section_header_sym
+%ELF_shstr__sym>ELF_shstr      # sh_name
+02 00 00 00                    # sh_type: str-sht-symtab
+00 00 00 00 00 00 00 00        # sh_flags
+&ELF_sym 00 00 00 00           # sh_addr
+%ELF_sym>ELF_base 00 00 00 00  # sh_offset
+%ELF_end>ELF_sym 00 00 00 00   # sh_length
+06 00 00 00                    # sh_link:6
+00 00 00 00                    # sh_info
+01 00 00 00 00 00 00 00        # sh_1?
+18 00 00 00 00 00 00 00        # sh_entsize
+
+:ELF_section_header_str
+%ELF_shstr__str>ELF_shstr      # sh_name
+03 00 00 00                    # sh_type: str-sht-strtab
+00 00 00 00 00 00 00 00        # sh_flags
+&ELF_str 00 00 00 00           # sh_addr
+%ELF_str>ELF_base 00 00 00 00  # sh_offset
+%ELF_sym>ELF_str 00 00 00 00   # sh_length
+00 00 00 00                    # sh_link
+00 00 00 00                    # sh_info
+01 00 00 00 00 00 00 00        # sh_1?
+00 00 00 00 00 00 00 00        # sh_entsize
+
+# @2c0
+00 00 00 00  # align
+00 00 00 00
+00 00 00 00
+00 00 00 00
+
+# @2d0
+00 00 00 00  # align
+00 00 00 00
+00 00 00 00
+00 00 00 00
+
+# @2e0
+00 00 00 00  # align
+00 00 00 00
+00 00 00 00
+00 00 00 00
+
+# @2f0
+00 00 00 00  # align
+00 00 00 00
+00 00 00 00
+00 00 00 00
+
+# @300
+:ELF_text
diff --git a/lib/x86-mes-gcc/exit-42.S b/lib/x86-mes-gcc/exit-42.S
deleted file mode 100644 (file)
index 2ab7b17..0000000
+++ /dev/null
@@ -1,46 +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/>.
- */
-
-/** Commentary: */
-
-/* Using gdb, esp. GUD in GNU Emacs is recommended
-M-x gdb-display-disassembly-buffer
-M-x gdb-display-io-buffer
-set disassemble-next-line on
-break _start
-run
-info registers
-si
-p/x $eax
-RET
-...
-*/
-
-/** Code: */
-
-SYS_exit = 1                   /* Linux syscall: exit.  */
-       .globl _start           /* Magic linker symbol: --entry-address.  */
-
-       .text                   /* Program text. */
-_start:
-       mov     $SYS_exit,%eax  /* System call function: exit, in %eax.  */
-       mov     $42,%ebx        /* First parameter: exit status, in %ebx. */
-       int     $0x80           /* Call system.  */
-       hlt                     /* Should not be reached.  */
diff --git a/lib/x86-mes-gcc/hello-mes.S b/lib/x86-mes-gcc/hello-mes.S
deleted file mode 100644 (file)
index 88b55fe..0000000
+++ /dev/null
@@ -1,58 +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/>.
- */
-
-/** Commentary: */
-
-/* Using gdb, esp. GUD in GNU Emacs is recommended
-M-x gdb-display-disassembly-buffer
-M-x gdb-display-io-buffer
-set disassemble-next-line on
-break _start
-run
-info registers
-si
-p/x $eax
-RET
-...
-*/
-
-/** Code: */
-
-SYS_exit       = 1             /* Linux syscalls.  */
-SYS_write      = 4
-stdout         = 1             /* File discriptor */
-       .globl _start           /* Magic linker symbol: --entry-address.  */
-
-       .text                   /* Program text. */
-_start:
-       mov     $SYS_write,%eax /* System call function: write, in %eax.  */
-       mov     $stdout,%ebx    /* 1st parameter: file descriptor, in %ebx. */
-       mov     $hello,%ecx     /* 2nd parameter: address, in %ecx. */
-       mov     $(bye-hello),%edx       /* 3rd parameter: byte count %edx. */
-       int     $0x80           /* Call system.  */
-
-       mov     $SYS_exit,%eax  /* System call function: exit, in %eax.  */
-       mov     $0,%ebx         /* 1st parameter: exit status, in %ebx. */
-       int     $0x80           /* Call system.  */
-       hlt                     /* Should not be reached.  */
-
-       .data
-hello: .ascii  "Hello, GNU Mes!\n"
-bye:   .byte   0
diff --git a/lib/x86-mes-mescc/exit-42.S b/lib/x86-mes-mescc/exit-42.S
deleted file mode 100644 (file)
index 9a3a808..0000000
+++ /dev/null
@@ -1,28 +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/>.
-
-DEFINE sys_exit 01
-
-:main
-       mov____$i8,%eax !42
-       mov____%eax,%ebx
-       mov____$i8,%eax sys_exit
-       int____$0x80
-
-:ELF_data
-:HEX2_data
diff --git a/lib/x86-mes-mescc/hello-mes.S b/lib/x86-mes-mescc/hello-mes.S
deleted file mode 100644 (file)
index 3b26c77..0000000
+++ /dev/null
@@ -1,40 +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/>.
-
-DEFINE sys_exit  01
-DEFINE sys_write 04
-
-:main
-       mov____$i8,%eax !end_hello_message>hello_message
-       mov____%eax,%ecx
-       mov____$i8,%eax !0
-       mov____%eax,%ebx
-       mov____$i8,%eax sys_write
-       int____$0x80
-
-       mov____$i8,%eax !0
-       mov____%eax,%ebx
-       mov____$i8,%eax sys_exit
-       int____$0x80
-
-:ELF_data
-:hello_message
-"Hello, GNU Mes!
-"
-:end_hello_message
-:HEX2_data
diff --git a/lib/x86-mes/elf32-0exit-42.hex2 b/lib/x86-mes/elf32-0exit-42.hex2
deleted file mode 100644 (file)
index 4d3b6a0..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-### GNU Mes --- Maxwell Equations of Software
-### Copyright © 2017,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/>.
-
-### Commentary:
-
-# elf32-exit-42.hex2: `exit 42' for i686-linux written in hex2 assembly,
-# for usage with elf32-0header.hex2.  This produces a 112-byte binary
-# (70 hex).  Inspiration was taken from GNU Gcc output of exit-42.S.
-
-### Code:
-
-# @60
-:ELF_text
-b8 01 00 00 00                 # mov    $1, %eax
-bb 2a 00 00 00                 # mov    $42, %ebx
-cd 80                          # int    $0x80
-f4                             # hlt
-00 00 00                       # align to @70
-:ELF_end
diff --git a/lib/x86-mes/elf32-0header.hex2 b/lib/x86-mes/elf32-0header.hex2
deleted file mode 100644 (file)
index c8a6c7f..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-### Copyright (C) 2016 Jeremiah Orians
-### Copyright (C) 2017,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/>.
-
-### Commentary:
-
-# elf32-0header.hex2: Simplest 32 bit elf header in hex2.  Only a text
-# segment, no data segment, no symbol tables.
-
-# stage0's hex2 format for x86
-#    !<label>          1 byte relative
-#    $<label>          2 byte address
-#    @<label>          2 byte relative
-#    &<label>          4 byte address
-#    %<label>          4 byte relative
-#    local_<label>     function-local
-#    string_<index>    string #<index>
-
-### Code:
-
-:ELF_base
-7F 45 4C 46                    # e_ident[EI_MAG0-3] ELF's magic number
-
-01                             # e_ident[EI_CLASS] Indicating 32 bit
-01                             # e_ident[EI_DATA] Indicating little endianness
-01                             # e_ident[EI_VERSION] Indicating original elf
-
-00                             # e_ident[EI_OSABI] Set at 0 because none cares
-00                             # e_ident[EI_ABIVERSION] See above
-
-00 00 00 00 00 00 00           # e_ident[EI_PAD]
-
-02 00                          # e_type Indicating Executable
-03 00                          # e_machine Indicating 32bit x86
-01 00 00 00                    # e_version Indicating original elf
-
-&ELF_text                      # e_entry Address of the entry point
-%ELF_program_headers>ELF_base  # e_phoff Address of program header table
-00 00 00 00                    # e_shoff Address of section header table
-
-00 00 00 00                    # e_flags
-
-34 00                          # e_ehsize Indicating our 52 Byte header
-
-20 00                          # e_phentsize size of a program header table
-01 00                          # e_phnum number of entries in program table
-
-00 00                          # e_shentsize size of a section header table
-00 00                          # e_shnum number of entries in section table
-
-00 00                          # e_shstrndx index of the section names
-
-# @34
-00 00 00 00
-00 00 00 00
-00 00 00 00
-
-# @40
-:ELF_program_headers
-:ELF_program_header__text
-01 00 00 00                    # ph_type: PT-LOAD = 1
-00 00 00 00                    # ph_offset
-&ELF_base                      # ph_vaddr
-&ELF_base                      # ph_physaddr
-%ELF_end>ELF_base              # ph_filesz
-%ELF_end>ELF_base              # ph_memsz
-07 00 00 00                    # ph_flags: PF-X|PF-W|PF-R = 7
-01 00 00 00                    # ph_align
-
-# @60
-:ELF_text
diff --git a/lib/x86-mes/elf32-0hello-mes.hex2 b/lib/x86-mes/elf32-0hello-mes.hex2
deleted file mode 100644 (file)
index 7c07d25..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-### GNU Mes --- Maxwell Equations of Software
-### Copyright © 2017,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/>.
-
-### Commentary:
-
-# elf32-0hello-mes.hex2: `Hello, GNU Mes!' for i686-linux written in
-# hex2 assembly, for usage with elf32-0header.hex2.  This produces a
-# 160-byte binary (a0 hex).  Inspiration was taken from GNU Gcc output
-# of hello-mes.S.
-
-### Code:
-
-# @60
-:ELF_text
-
-                               # print <hello>
-b8 04 00 00 00                 # mov    $4,%eax
-bb 00 00 00 00                 # mov    $1,%ebx
-b9 &hello                      # mov    $hello,%ecx
-ba %bye>hello                  # mov    $(bye-hello),%edx
-cd 80                          # int    $0x80
-
-                               # exit 0
-b8 01 00 00 00                 # mov    $1,%eax
-bb 00 00 00 00                 # mov    $0,%ebx
-cd 80                          # int    $0x80
-f4                             # hlt
-
-00 00 00 00 00 00 00 00 00 00  # align to @90
-00 00 00
-
-# @90
-:ELF_data
-:hello
-48 65 6c 6c 6f 2c 20 47        # Hello, G
-4e 55 20 4d 65 73 21 0a        # NU Mes!\n
-:bye
-:ELF_end
diff --git a/lib/x86-mes/elf32-body-exit-42.hex2 b/lib/x86-mes/elf32-body-exit-42.hex2
deleted file mode 100644 (file)
index 98c12cb..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-### GNU Mes --- Maxwell Equations of Software
-### Copyright © 2017,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/>.
-
-### Commentary:
-
-# elf32-body-exit-42.hex2: `exit 42' for i686-linux written in hex2
-# assembly, for usage with generic elf32-header.hex2 and
-# elf32-footer-single-main.hex.
-
-# This ELF binary contains a symbol table, which means that objdump and
-# gdb can be used to inspect and debug.
-
-### Code:
-
-# @200
-:ELF_text
-:_start
-e8 %main                       # call   +11 <main>
-00 00 00
-00 00 00 00
-00 00 00 00
-
-# @210
-:main
-bb 2a 00 00 00                 # mov    $42,%ebx
-b8 01 00 00 00                 # mov    $0x1,%eax
-cd 80                          # int    $0x80
-f4                             # hlt
-
-00 00 00                       # align
-
-# @220
-:ELF_data
-65 78 69 74 34 32 20 64 61 74 61 20 68 65 72 65 # exit42 data here"
-00
diff --git a/lib/x86-mes/elf32-body-hello-mes.hex2 b/lib/x86-mes/elf32-body-hello-mes.hex2
deleted file mode 100644 (file)
index 5741133..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-### GNU Mes --- Maxwell Equations of Software
-### Copyright © 2017,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/>.
-
-### Commentary:
-
-# elf32-body-hello-mes.hex2: `Hello, GNU Mes!' for i686-linux written in
-# hex2 assembly, for usage with generic elf32-header.hex2 and
-# elf32-footer-single-main.hex.
-
-# This ELF binary contains a symbol table which means that objdump and
-# gdb can be used to inspect and debug.
-
-### Code:
-
-# @200
-:ELF_text
-:_start
-e8 %main                       # call   +11 <main>
-00 00 00
-00 00 00 00
-00 00 00 00
-
-# @210
-:main
-                               # print <hello>
-b8 04 00 00 00                 # mov    $4, %eax
-bb 00 00 00 00                 # mov    $1, %ebx
-b9 &hello                      # mov    $hello,%ecx
-ba %bye>hello                  # mov    $(bye-hello),%edx
-cd 80                          # int    $0x80
-
-                               # exit 0
-b8 01 00 00 00                 # mov    $0x1,%eax
-bb 00 00 00 00                 # mov    $0,%ebx
-cd 80                          # int    $0x80
-f4                             # hlt
-
-00 00 00 00 00 00 00 00 00 00  # align to @240
-00 00 00
-
-# @240
-:ELF_data
-:hello
-48 65 6c 6c 6f 2c 20 47        # Hello, G
-4e 55 20 4d 65 73 21 0a        # NU Mes!\n
-
-:bye
-00
diff --git a/lib/x86-mes/elf32-footer-single-main.hex2 b/lib/x86-mes/elf32-footer-single-main.hex2
deleted file mode 100644 (file)
index 5695055..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-### Copyright (C) 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
-### This file is part of stage0.
-###
-### stage0 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.
-###
-### stage0 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 stage0.  If not, see <http://www.gnu.org/licenses/>.
-
-### stage0's hex2 format for x86
-###    !<label>          1 byte relative
-###    $<label>          2 byte address
-###    @<label>          2 byte relative
-###    &<label>          4 byte address
-###    %<label>          4 byte relative
-###    local_<label>     function-local
-###    string_<index>    string #<index>
-
-### elf32-footer-single-main.hex2: 32 bit elf footer in hex2 for single main
-
-# @230
-
-:ELF_str
-00                             # 0
-:ELF_str__start
-5f 73 74 61 72 74 00           # _start
-:ELF_str__main
-6d 61 69 6e 00                 # main
-
-00 00 00
-
-# @240
-:ELF_sym
-00 00 00 00                    # st-name
-00 00 00 00                    # st-offset: &_start - BaseAddress
-00 00 00 00                    # st-len   : &main - _start
-00                             # st-info = stt-func= 2
-00                             # st-other
-01 00                          # st-shndx: 1
-
-# _start
-%ELF_str__start>ELF_str        # st-name
-&_start
-10 00 00 00                    # st-len   : &main - _start
-02                             # st-info = stt-func= 2
-00                             # st-other
-01 00                          # st-shndx: 1
-
-# main
-%ELF_str__main>ELF_str         # st-name
-&main
-10 00 00 00                    # st-len   : &ELF_data - main
-02                             # st-info = stt-func= 2
-00                             # st-other
-01 00                          # st-shndx: 1
-
-:ELF_end
diff --git a/lib/x86-mes/elf32-header.hex2 b/lib/x86-mes/elf32-header.hex2
deleted file mode 100644 (file)
index 2624453..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-### Copyright (C) 2016 Jeremiah Orians
-### Copyright (C) 2017,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/>.
-
-### Commentary:
-
-# elf32-header.hex2: 32 bit elf header in hex2, with text segment, data
-# segment and symbol tables.
-
-# stage0's hex2 format for x86
-#    !<label>          1 byte relative
-#    $<label>          2 byte address
-#    @<label>          2 byte relative
-#    &<label>          4 byte address
-#    %<label>          4 byte relative
-#    local_<label>     function-local
-#    string_<index>    string #<index>
-
-### Code:
-
-:ELF_base
-7F 45 4C 46                    # e_ident[EI_MAG0-3] ELF's magic number
-
-01                             # e_ident[EI_CLASS] Indicating 32 bit
-01                             # e_ident[EI_DATA] Indicating little endianness
-01                             # e_ident[EI_VERSION] Indicating original elf
-
-00                             # e_ident[EI_OSABI] Set at 0 because none cares
-00                             # e_ident[EI_ABIVERSION] See above
-
-00 00 00 00 00 00 00           # e_ident[EI_PAD]
-
-02 00                          # e_type Indicating Executable
-03 00                          # e_machine Indicating 32bit x86
-01 00 00 00                    # e_version Indicating original elf
-
-&ELF_text                      # e_entry Address of the entry point
-%ELF_program_headers>ELF_base  # e_phoff Address of program header table
-%ELF_section_headers>ELF_base  # e_shoff Address of section header table
-
-00 00 00 00                    # e_flags
-
-34 00                          # e_ehsize Indicating our 52 Byte header
-
-20 00                          # e_phentsize size of a program header table
-01 00                          # e_phnum number of entries in program table
-
-28 00                          # e_shentsize size of a section header table
-07 00                          # e_shnum number of entries in section table
-
-04 00                          # e_shstrndx index of the section names
-
-# @34
-00 00 00 00
-00 00 00 00
-00 00 00 00
-
-# @40
-:ELF_program_headers
-:ELF_program_header__text
-01 00 00 00                    # ph_type: PT-LOAD = 1
-00 00 00 00                    # ph_offset
-&ELF_base                      # ph_vaddr
-&ELF_base                      # ph_physaddr
-%ELF_end>ELF_base              # ph_filesz
-%ELF_end>ELF_base              # ph_memsz
-07 00 00 00                    # ph_flags: PF-X|PF-W|PF-R = 7
-01 00 00 00                    # ph_align
-
-# @60
-#:ELF_program_header__data     # NOT USED
-                               # FIXME: linux 4.17 does not allow this overlap
-                               #    Uhuuh, elf segment at 0000000001000000
-                               #    requested but the memory is mapped already
-01 00 00 00                    # ph_type: PT-LOAD = 1
-00 00 00 00                    # ph_offset
-&ELF_base                      # ph_vaddr
-&ELF_base                      # ph_physaddr
-%ELF_end>ELF_base              # ph_filesz
-%ELF_end>ELF_base              # ph_memsz
-07 00 00 00                    # ph_flags: PF-X|PF-W|PF-R = 7
-01 00 00 00                    # ph_align
-
-# @80
-:ELF_comment
-4d 45 53 00                     # MES
-00 00 00 00                     # align
-00 00 00 00
-00 00 00 00
-
-4d 45 53 00                     # MES
-00 00 00 00                     # align
-00 00 00 00
-00 00 00 00
-
-# @a0
-:ELF_shstr
-00
-:ELF_shstr__text
-2e 74 65 78 74 00               # .text
-:ELF_shstr__data
-2e 64 61 74 61 00               # .data
-:ELF_shstr__comment
-2e 63 6f 6d 6d 65 6e 74 00      # .comment
-:ELF_shstr__shstr
-2e 73 68 73 74 72 74 61 62 00   # .shstrtab
-:ELF_shstr__sym
-2e 73 79 6d 74 61 62 00         # .symtab
-:ELF_shstr__str
-2e 73 74 72 74 61 62 00         # .strtab
-
-# @d0
-
-:ELF_section_headers
-00 00 00 00                     # sh_name
-00 00 00 00                     # sh_type
-00 00 00 00                     # sh_flags
-00 00 00 00                     # sh_addr
-00 00 00 00                     # sh_offset
-00 00 00 00                     # sh_length
-00 00 00 00                     # sh_link
-00 00 00 00                     # sh_info
-01 00 00 00                     # sh_1?
-00 00 00 00                     # sh_entsize
-
-## FIXME: M0 for calculations?
-:ELF_section_header_text
-%ELF_shstr__text>ELF_shstr      # sh_name
-01 00 00 00                     # sh_type = SHT_PROGBITS = 1
-06 00 00 00                     # sh_flags = SHF-ALLOC|SHF-EXEC =2 | 4 = 6
-&ELF_text                       # sh_addr
-%ELF_text>ELF_base              # sh_offset
-%ELF_data>ELF_text              # sh_length
-00 00 00 00                     # sh_link
-00 00 00 00                     # sh_info
-01 00 00 00                     # sh_1?
-00 00 00 00                     # sh_entsize
-
-:ELF_section_header_data
-%ELF_shstr__data>ELF_shstr     # sh_name
-01 00 00 00                    # sh_type = SHT_PROGBITS = 1
-03 00 00 00                    # sh_flags = SHF-WRITE|SHF-ALLOC = 1 | 2 = 3
-&ELF_data                      # sh_addr
-%ELF_data>ELF_base             # sh_offset
-%ELF_sym>ELF_data              # sh_length
-00 00 00 00                    # sh_link
-00 00 00 00                    # sh_info
-01 00 00 00                    # sh_1?
-00 00 00 00                    # sh_entsize
-
-:ELF_section_header_comment
-%ELF_shstr__comment>ELF_shstr  # sh_name
-01 00 00 00                    # sh_type = SHT_PROGBITS = 1
-00 00 00 00                    # sh_flags
-&ELF_comment                   # sh_addr
-%ELF_comment>ELF_base          # sh_offset
-%ELF_shstr>ELF_comment         # sh_length
-00 00 00 00                    # sh_link
-00 00 00 00                    # sh_info
-01 00 00 00                    # sh_1?
-00 00 00 00                    # sh_entsize
-
-:ELF_section_header_shstr
-%ELF_shstr__shstr>ELF_shstr    # sh_name
-03 00 00 00                    # sh_type: str-sht-strtab
-00 00 00 00                    # sh_flags
-&ELF_shstr                     # sh_addr
-%ELF_shstr>ELF_base            # sh_offset
-%ELF_section_headers>ELF_shstr # sh_length
-00 00 00 00                    # sh_link
-00 00 00 00                    # sh_info
-01 00 00 00                    # sh_1?
-00 00 00 00                    # sh_entsize
-
-:ELF_section_header_sym
-%ELF_shstr__sym>ELF_shstr      # sh_name
-02 00 00 00                    # sh_type: str-sht-symtab
-00 00 00 00                    # sh_flags
-&ELF_sym                       # sh_addr
-%ELF_sym>ELF_base              # sh_offset
-%ELF_end>ELF_sym               # sh_length
-06 00 00 00                    # sh_link:6
-00 00 00 00                    # sh_info
-01 00 00 00                    # sh_1?
-10 00 00 00                    # sh_entsize
-
-:ELF_section_header_str
-%ELF_shstr__str>ELF_shstr      # sh_name
-03 00 00 00                    # sh_type: str-sht-strtab
-00 00 00 00                    # sh_flags
-&ELF_str                       # sh_addr
-%ELF_str>ELF_base              # sh_offset
-%ELF_sym>ELF_str               # sh_length
-00 00 00 00                    # sh_link
-00 00 00 00                    # sh_info
-01 00 00 00                    # sh_1?
-00 00 00 00                    # sh_entsize
-
-# @1e8
-00 00 00 00  # align
-00 00 00 00
-
-# @1f0
-
-00 00 00 00  # align
-00 00 00 00
-00 00 00 00
-00 00 00 00
-
-# @200
-:ELF_text
diff --git a/lib/x86_64-mes-gcc/exit-42.S b/lib/x86_64-mes-gcc/exit-42.S
deleted file mode 100644 (file)
index 0e45bd0..0000000
+++ /dev/null
@@ -1,46 +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/>.
- */
-
-/** Commentary: */
-
-/* Using gdb, esp. GUD in GNU Emacs is recommended
-M-x gdb-display-disassembly-buffer
-M-x gdb-display-io-buffer
-set disassemble-next-line on
-break _start
-run
-info registers
-si
-p/x $rax
-RET
-...
-*/
-
-/** Code: */
-
-SYS_exit = 0x3c                        /* Linux syscall: exit.  */
-       .globl _start           /* Magic linker symbol: --entry-address.  */
-
-       .text                   /* Program text. */
-_start:
-       movabs  $SYS_exit,%rax  /* System call function: exit, in %rax.  */
-       movabs  $42,%rdi        /* First parameter: exit status, in %rdi. */
-       syscall                 /* Call system.  */
-       hlt                     /* Should not be reached.  */
diff --git a/lib/x86_64-mes-gcc/hello-mes.S b/lib/x86_64-mes-gcc/hello-mes.S
deleted file mode 100644 (file)
index ba9c89c..0000000
+++ /dev/null
@@ -1,58 +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/>.
- */
-
-/** Commentary: */
-
-/* Using gdb, esp. GUD in GNU Emacs is recommended
-M-x gdb-display-disassembly-buffer
-M-x gdb-display-io-buffer
-set disassemble-next-line on
-break _start
-run
-info registers
-si
-p/x $rax
-RET
-...
-*/
-
-/** Code: */
-
-SYS_exit       = 0x3c          /* Linux syscalls.  */
-SYS_write      = 0x01
-stdout         = 1             /* File discriptor */
-       .globl _start           /* Magic linker symbol: --entry-address.  */
-
-       .text                   /* Program text. */
-_start:
-       movabs  $SYS_write,%rax /* System call function: write, in %rax.  */
-       movabs  $stdout,%rdi    /* 1st parameter: file descriptor, in %rdi. */
-       movabs  $hello,%rsi     /* 2nd parameter: address, in %rsi. */
-       movabs  $(bye-hello),%rdx       /* 3rd parameter: byte count %rdx. */
-       syscall                 /* Call system.  */
-
-       movabs  $SYS_exit,%rax  /* System call function: exit, in %rax.  */
-       movabs  $0,%rdi         /* 1st parameter: exit status, in %rdi. */
-       syscall                 /* Call system.  */
-       hlt                     /* Should not be reached.  */
-
-       .data
-hello: .ascii  "Hello, GNU Mes!\n"
-bye:   .byte   0
diff --git a/lib/x86_64-mes-mescc/exit-42.S b/lib/x86_64-mes-mescc/exit-42.S
deleted file mode 100644 (file)
index 8e8aa06..0000000
+++ /dev/null
@@ -1,28 +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/>.
-
-DEFINE sys_exit 0x3c
-
-:main
-       mov____$i8,%eax !42
-       mov____%rax,%rbx
-       mov____$i8,%eax sys_exit
-       syscall
-
-:ELF_data
-:HEX2_data
diff --git a/lib/x86_64-mes-mescc/hello-mes.S b/lib/x86_64-mes-mescc/hello-mes.S
deleted file mode 100644 (file)
index 0dbe5a7..0000000
+++ /dev/null
@@ -1,40 +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/>.
-
-DEFINE sys_exit  0x3c
-DEFINE sys_write 0x01
-
-:main
-       mov____$i8,%eax !end_hello_message>hello_message
-       mov____%rax,%rcx
-       mov____$i8,%eax !0
-       mov____%rax,%rbx
-       mov____$i8,%eax sys_write
-       syscall
-
-       mov____$i8,%eax !0
-       mov____%rax,%rbx
-       mov____$i8,%eax sys_exit
-       syscall
-
-:ELF_data
-:hello_message
-"Hello, GNU Mes!
-"
-:end_hello_message
-:HEX2_data
diff --git a/lib/x86_64-mes/elf64-0exit-42.hex2 b/lib/x86_64-mes/elf64-0exit-42.hex2
deleted file mode 100644 (file)
index 5be3faf..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-### GNU Mes --- Maxwell Equations of Software
-### Copyright © 2017,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/>.
-
-### Commentary:
-
-# elf64-exit-42.hex2: `exit 42' for x86_64-linux written in hex2
-# assembly, for usage with elf64-0header.hex2.  This produces a 160-byte
-# binary (a0 hex).  Inspiration was taken from GNU Gcc output of
-# exit-42.S.
-
-### Code:
-
-# @80
-:ELF_text
-48 b8 3c 00 00 00 00 00 00 00  # movabs $0x3c,%rax
-48 bf 2a 00 00 00 00 00 00 00  # movabs $42,%rdi
-0f 05                          # syscall
-f4                             # hlt
-
-00 00 00 00 00 00 00 00 00     # align to @a0
-:ELF_end
diff --git a/lib/x86_64-mes/elf64-0header.hex2 b/lib/x86_64-mes/elf64-0header.hex2
deleted file mode 100644 (file)
index 56aaa05..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-### Copyright (C) 2016 Jeremiah Orians
-### Copyright (C) 2017,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/>.
-
-### Commentary:
-
-# elf64-0header.hex2: Simplest 64 bit elf header in hex2.  Only a text
-# segment, no data segment, no symbol tables.
-
-# stage0's hex2 format for x86_64
-#    !<label>          1 byte relative
-#    $<label>          2 byte address
-#    @<label>          2 byte relative
-#    &<label>          4 byte address
-#    %<label>          4 byte relative
-#    local_<label>     function-local
-#    string_<index>    string #<index>
-
-### Code:
-
-: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
-
-00                             # e_ident[EI_OSABI] Set at 0 because none cares
-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
-
-&ELF_text 00 00 00 00          # e_entry Address of the entry point
-%ELF_program_headers>ELF_base  # e_phoff Address of program header table
-  00 00 00 00
-
-00 00 00 00 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
-
-00 00                          # e_shentsize size of a section header table
-00 00                          # e_shnum number of entries in section table
-
-00 00                          # e_shstrndx index of the section names
-
-# @40
-: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        # p_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
-
-00 00 00 00 00 00 00 00        # align to @80
-# @80
-:ELF_text
diff --git a/lib/x86_64-mes/elf64-0hello-mes.hex2 b/lib/x86_64-mes/elf64-0hello-mes.hex2
deleted file mode 100644 (file)
index 22ae310..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-### GNU Mes --- Maxwell Equations of Software
-### Copyright © 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/>.
-
-### Commentary:
-
-# elf64-hello-mes.hex2: `Hello, GNU Mes!' for x86_64-linux written in
-# hex2 assembly, for usage with elf64-0header.hex2.  This produces a
-# 224-byte binary (e0 hex).  Inspiration was taken from GNU Gcc output
-# of hello-mes.S.
-
-### Code:
-
-# @80
-:ELF_text
-                               # print <hello>
-48 b8 01 00 00 00 00 00 00 00  # movabs $1,%rax
-48 bf 01 00 00 00 00 00 00 00  # movabs $1,%rdi
-48 be &hello 00 00 00 00       # movabs $<hello>,%rsi
-48 ba %bye>hello 00 00 00 00   # mov    $(bye-hello),%rdx
-0f 05                          # syscall
-
-                               # exit 0
-48 b8 3c 00 00 00 00 00 00 00  # movabs $0x3c,%rax
-48 bf 00 00 00 00 00 00 00 00  # movabs $0,%rdi
-0f 05                          # syscall
-f4                             # hlt
-
-00 00 00 00 00 00 00 00 00     # align to @d0
-00 00 00 00 00 00
-
-# @d0
-:ELF_data
-:hello
-48 65 6c 6c 6f 2c 20 47        # Hello, G
-4e 55 20 4d 65 73 21 0a        # NU Mes!\n
-:bye
-:ELF_end
diff --git a/lib/x86_64-mes/elf64-body-exit-42.hex2 b/lib/x86_64-mes/elf64-body-exit-42.hex2
deleted file mode 100644 (file)
index c427b40..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-### GNU Mes --- Maxwell Equations of Software
-### Copyright © 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/>.
-
-### Commentary:
-
-# elf64-body-exit-42.hex2: `exit 42' for x86_64-linux written in hex2
-# assembly, for usage with generic elf64-header.hex2 and
-# elf64-footer-single-main.hex.
-
-# This ELF binary contains a symbol table, which means that objdump and
-# gdb can be used to inspect and debug.
-
-### Code:
-
-# @300
-:ELF_text
-:_start
-# exit(42)
-e8 %main                       # call  +11 <main>
-00 00 00
-00 00 00 00
-00 00 00 00
-
-# @310
-:main
-48 b8 3c 00 00 00 00 00 00 00  # movabs $0x3c,%rax
-48 bf 2a 00 00 00 00 00 00 00  # movabs $42,%rdi
-0f 05                          # syscall
-f4                             # hlt
-
-00 00 00 00 00 00 00 00 00     # align to 330
-
-# @330
-:ELF_data
-65 78 69 74 34 32 20 64 61 74 61 20 68 65 72 65 # exit42 data here"
-00
diff --git a/lib/x86_64-mes/elf64-body-hello-mes.hex2 b/lib/x86_64-mes/elf64-body-hello-mes.hex2
deleted file mode 100644 (file)
index 19f3410..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-### GNU Mes --- Maxwell Equations of Software
-### Copyright © 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/>.
-
-### Commentary:
-
-# elf64-body-hello-mes.hex2: `Hello, GNU Mes!' for x86_64-linux written
-# in hex2 assembly, for usage with generic elf64-header.hex2 and
-# elf64-footer-single-main.hex.
-
-# This ELF binary contains a symbol table which means that objdump and
-# gdb can be used to inspect and debug.
-
-### Code:
-
-# @300
-:ELF_text
-:_start
-# exit(42)
-e8 %main                       # call  +11 <main>
-00 00 00
-00 00 00 00
-00 00 00 00
-
-# @310
-:main
-                               # print <hello>
-48 b8 01 00 00 00 00 00 00 00  # movabs $1,%rax
-48 bf 01 00 00 00 00 00 00 00  # movabs $1,%rdi
-48 be &hello 00 00 00 00       # movabs $<hello>,%rsi
-48 ba %bye>hello 00 00 00 00   # mov    $(bye-hello),%rdx
-0f 05                          # syscall
-
-                               # exit 0
-48 b8 3c 00 00 00 00 00 00 00  # movabs $0x3c,%rax
-48 bf 00 00 00 00 00 00 00 00  # movabs $0,%rdi
-0f 05                          # syscall
-f4                             # hlt
-
-00 00 00 00 00 00 00 00 00     # align to @360
-00 00 00 00 00 00
-
-# @360
-:ELF_data
-:hello
-48 65 6c 6c 6f 2c 20 47        # Hello, G
-4e 55 20 4d 65 73 21 0a        # NU Mes!\n
-:bye
-:ELF_end
diff --git a/lib/x86_64-mes/elf64-footer-single-main.hex2 b/lib/x86_64-mes/elf64-footer-single-main.hex2
deleted file mode 100644 (file)
index 0e319c3..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-### Copyright (C) 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
-### This file is part of stage0.
-###
-### stage0 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.
-###
-### stage0 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 stage0.  If not, see <http://www.gnu.org/licenses/>.
-
-### stage0's hex2 format for x86_64
-###    !<label>          1 byte relative
-###    $<label>          2 byte address
-###    @<label>          2 byte relative
-###    &<label>          4 byte address
-###    %<label>          4 byte relative
-###    local_<label>     function-local
-###    string_<index>    string #<index>
-
-# @230
-
-:ELF_str
-00                             # 0
-:ELF_str__start
-5f 73 74 61 72 74 00           # _start
-:ELF_str__main
-6d 61 69 6e 00                 # main
-
-00 00 00
-
-# @370
-:ELF_sym
-00 00 00 00                    # st-name
-00                             # st-info = stt-func= 2
-00                             # st-other
-01 00                          # st-shndx: 1
-00 00 00 00 00 00 00 00        # st-offset: &_start - BaseAddress
-00 00 00 00 00 00 00 00        # st-len   : &main - _start
-
-# _start
-%ELF_str__start>ELF_str        # st-name
-02                             # st-info = stt-func= 2
-00                             # st-other
-01 00                          # st-shndx: 1
-&_start 00 00 00 00
-10 00 00 00 00 00 00 00        # st-len   : &main - _start
-
-# main
-%ELF_str__main>ELF_str         # st-name
-02                             # st-info = stt-func= 2
-00                             # st-other
-01 00                          # st-shndx: 1
-&main 00 00 00 00
-10 00 00 00 00 00 00 00        # st-len   : &ELF_data - main
-
-:ELF_end
diff --git a/lib/x86_64-mes/elf64-header.hex2 b/lib/x86_64-mes/elf64-header.hex2
deleted file mode 100644 (file)
index 258e3da..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-### Copyright (C) 2016 Jeremiah Orians
-### Copyright (C) 2017,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/>.
-
-### Commentary:
-
-# elf64-header.hex2: 64 bit elf header in hex2, with text segment, data
-# segment and symbol tables.
-
-# stage0's hex2 format for x86_64
-#    !<label>          1 byte relative
-#    $<label>          2 byte address
-#    @<label>          2 byte relative
-#    &<label>          4 byte address
-#    %<label>          4 byte relative
-#    local_<label>     function-local
-#    string_<index>    string #<index>
-
-### Code:
-
-: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
-
-00                             # e_ident[EI_OSABI] Set at 0 because none cares
-00                             # e_ident[EI_ABIVERSION] See above
-
-00 00 00 00 00 00 00           # e_ident[EI_PAD]
-
-# 0x10
-02 00                          # e_type Indicating Executable
-3e 00                          # e_machine Indicating AMD64
-01 00 00 00                    # e_version Indicating original elf
-
-# 0x18
-&ELF_text 00 00 00 00          # e_entry Address of the entry point
-%ELF_program_headers>ELF_base  # e_phoff Address of program header table
-  00 00 00 00
-
-%ELF_section_headers>ELF_base  # e_shoff Address of section header table
-  00 00 00 00
-
-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
-07 00                          # e_shnum number of entries in section table
-
-04 00                          # e_shstrndx index of the section names
-
-# @40
-: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        # p_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
-
-
-# @60
-#:ELF_program_header__data     # NOT USED
-                               # FIXME: linux 4.17 does not allow this overlap
-                               #    Uhuuh, elf segment at 0000000001000000
-                               #    requested but the memory is mapped already
-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
-
-# @b0
-:ELF_comment
-4d 45 53 00                     # MES
-00 00 00 00                     # align
-00 00 00 00
-00 00 00 00
-
-# @c0
-4d 45 53 00                     # MES
-00 00 00 00                     # align
-00 00 00 00
-00 00 00 00
-
-# @d0
-:ELF_shstr
-00
-:ELF_shstr__text
-2e 74 65 78 74 00               # .text
-:ELF_shstr__data
-2e 64 61 74 61 00               # .data
-:ELF_shstr__comment
-2e 63 6f 6d 6d 65 6e 74 00      # .comment
-:ELF_shstr__shstr
-2e 73 68 73 74 72 74 61 62 00   # .shstrtab
-:ELF_shstr__sym
-2e 73 79 6d 74 61 62 00         # .symtab
-:ELF_shstr__str
-2e 73 74 72 74 61 62 00         # .strtab
-
-# @100
-
-:ELF_section_headers
-00 00 00 00                     # sh_name
-00 00 00 00                     # sh_type
-00 00 00 00 00 00 00 00         # sh_flags
-00 00 00 00 00 00 00 00         # sh_addr
-00 00 00 00 00 00 00 00         # sh_offset
-00 00 00 00 00 00 00 00         # sh_length
-00 00 00 00                     # sh_link
-00 00 00 00                     # sh_info
-00 00 00 00 00 00 00 00         # sh_1?
-00 00 00 00 00 00 00 00         # sh_entsize
-
-## FIXME: M0 for calculations?
-:ELF_section_header_text
-%ELF_shstr__text>ELF_shstr      # sh_name
-01 00 00 00                     # sh_type = SHT_PROGBITS = 1
-06 00 00 00 00 00 00 00         # sh_flags = SHF-ALLOC|SHF-EXEC =2 | 4 = 6
-&ELF_text 00 00 00 00           # sh_addr
-%ELF_text>ELF_base 00 00 00 00  # sh_offset
-%ELF_data>ELF_text 00 00 00 00  # sh_length
-00 00 00 00                     # sh_link
-00 00 00 00                     # sh_info
-01 00 00 00 00 00 00 00         # sh_1?
-00 00 00 00 00 00 00 00         # sh_entsize
-
-:ELF_section_header_data
-%ELF_shstr__data>ELF_shstr     # sh_name
-01 00 00 00                    # sh_type = SHT_PROGBITS = 1
-03 00 00 00 00 00 00 00        # sh_flags = SHF-WRITE|SHF-ALLOC = 1 | 2 = 3
-&ELF_data 00 00 00 00          # sh_addr
-%ELF_data>ELF_base 00 00 00 00 # sh_offset
-%ELF_sym>ELF_data 00 00 00 00  # sh_length
-00 00 00 00                    # sh_link
-00 00 00 00                    # sh_info
-01 00 00 00 00 00 00 00        # sh_1?
-00 00 00 00 00 00 00 00        # sh_entsize
-
-:ELF_section_header_comment
-%ELF_shstr__comment>ELF_shstr  # sh_name
-01 00 00 00                    # sh_type = SHT_PROGBITS = 1
-00 00 00 00 00 00 00 00        # sh_flags
-&ELF_comment 00 00 00 00       # sh_addr
-%ELF_comment>ELF_base 00 00 00 00 # sh_offset
-%ELF_shstr>ELF_comment 00 00 00 00 # sh_length
-00 00 00 00                    # sh_link
-00 00 00 00                    # sh_info
-01 00 00 00 00 00 00 00        # sh_1?
-00 00 00 00 00 00 00 00        # sh_entsize
-
-:ELF_section_header_shstr
-%ELF_shstr__shstr>ELF_shstr    # sh_name
-03 00 00 00                    # sh_type: str-sht-strtab
-00 00 00 00 00 00 00 00        # sh_flags
-&ELF_shstr 00 00 00 00         # sh_addr
-%ELF_shstr>ELF_base 00 00 00 00 # sh_offset
-%ELF_section_headers>ELF_shstr 00 00 00 00 # sh_length
-00 00 00 00                    # sh_link
-00 00 00 00                    # sh_info
-01 00 00 00 00 00 00 00        # sh_1?
-00 00 00 00 00 00 00 00        # sh_entsize
-
-:ELF_section_header_sym
-%ELF_shstr__sym>ELF_shstr      # sh_name
-02 00 00 00                    # sh_type: str-sht-symtab
-00 00 00 00 00 00 00 00        # sh_flags
-&ELF_sym 00 00 00 00           # sh_addr
-%ELF_sym>ELF_base 00 00 00 00  # sh_offset
-%ELF_end>ELF_sym 00 00 00 00   # sh_length
-06 00 00 00                    # sh_link:6
-00 00 00 00                    # sh_info
-01 00 00 00 00 00 00 00        # sh_1?
-18 00 00 00 00 00 00 00        # sh_entsize
-
-:ELF_section_header_str
-%ELF_shstr__str>ELF_shstr      # sh_name
-03 00 00 00                    # sh_type: str-sht-strtab
-00 00 00 00 00 00 00 00        # sh_flags
-&ELF_str 00 00 00 00           # sh_addr
-%ELF_str>ELF_base 00 00 00 00  # sh_offset
-%ELF_sym>ELF_str 00 00 00 00   # sh_length
-00 00 00 00                    # sh_link
-00 00 00 00                    # sh_info
-01 00 00 00 00 00 00 00        # sh_1?
-00 00 00 00 00 00 00 00        # sh_entsize
-
-# @2c0
-00 00 00 00  # align
-00 00 00 00
-00 00 00 00
-00 00 00 00
-
-# @2d0
-00 00 00 00  # align
-00 00 00 00
-00 00 00 00
-00 00 00 00
-
-# @2e0
-00 00 00 00  # align
-00 00 00 00
-00 00 00 00
-00 00 00 00
-
-# @2f0
-00 00 00 00  # align
-00 00 00 00
-00 00 00 00
-00 00 00 00
-
-# @300
-:ELF_text
index dae7316ca224ce69d2c3d66f0e424ed1a794d5b9..2967c014643864d412554c67da0c789cf303c7d7 100644 (file)
@@ -37,6 +37,7 @@
   (define-macro (mes-use-module . rest) #t)))
 
 (define %host-arch (or (getenv "%arch") %arch))
+(define %host-kernel (or (getenv "%kernel") "linux")) ;; FIXME
 (define %prefix (or (getenv "%prefix") "mes"))
 (define %includedir (or (getenv "%includedir") "include"))
 (define %libdir (or (getenv "%libdir") "."))
@@ -102,6 +103,7 @@ C99 compiler in Scheme for bootstrapping the GNU system.
 Options:
   --align             align globals
   --arch=ARCH         compile for ARCH [~a]
+  --kernel=ARCH       compile for KERNEL [~a]
   -dumpmachine        display the compiler's target machine
   --base-address=ADRRESS
                       use BaseAddress ADDRESS [0x1000000]
@@ -141,7 +143,7 @@ Environment variables:
 Report bugs to: bug-mes@gnu.org
 GNU Mes home page: <http://gnu.org/software/mes/>
 General help using GNU software: <http://gnu.org/gethelp/>
-" %host-arch)
+" %host-arch %host-kernel)
                 (exit (or (and usage? 2) 0)))
            options))))
 
@@ -167,6 +169,8 @@ General help using GNU software: <http://gnu.org/gethelp/>
          (options (acons 'libdir %libdir options))
          (arch (option-ref options 'arch %host-arch))
          (options (if arch (acons 'arch arch options) options))
+         (kernel (option-ref options 'kernel %host-kernel))
+         (options (acons 'kernel kernel options))
          (numbered-arch? (option-ref options 'numbered-arch? %numbered-arch?))
          (options (acons 'numbered-arch? numbered-arch? options))
          (dumpmachine? (option-ref options 'dumpmachine #f))
index 3c13f7049db49c73337dea36be0f1c8ce2867f43..8f50f8eb43da9d137e4c8bb44e166c991b202e74 100644 (file)
          (hex2 (or (getenv "HEX2") "hex2"))
          (base-address (option-ref options 'base-address "0x1000000"))
          (machine (arch-get-machine options))
-         (elf-footer (or elf-footer
-                         (arch-find options (string-append
-                                             "elf" machine "-footer-single-main.hex2"))))
+         (elf-footer
+          (or elf-footer
+              (kernel-find
+               options
+               (string-append "elf" machine "-footer-single-main.hex2"))))
          (start-files (if (or (option-ref options 'nostartfiles #f)
                               (option-ref options 'nostdlib #f)) '()
                               `("-f" ,(arch-find options "crt1.o"))))
                     "--LittleEndian"
                     ,@(arch-get-architecture options)
                     "--BaseAddress" ,base-address
-                    "-f" ,(arch-find options (string-append "elf" machine "-header.hex2"))
+                    "-f" ,(kernel-find
+                           options
+                           (string-append "elf" machine "-header.hex2"))
                     ,@start-files
                     ,@(append-map (cut list "-f" <>) hex2-files)
                     "-f" ,elf-footer
 (define (find-library options ext o)
   (arch-find options (string-append "lib" o ext)))
 
-(define* (arch-find options file-name)
+(define* (arch-find options file-name #:key kernel)
   (let* ((srcdest (or (getenv "srcdest") ""))
          (srcdir-lib (string-append srcdest "lib"))
          (arch (string-append (arch-get options) "-mes"))
                       (option-ref options 'libdir "lib")
                       (filter-map (multi-opt 'library-dir) options)))
          (arch-file-name (string-append arch "/" file-name))
+         (arch-file-name (if kernel (string-append kernel "/" arch-file-name)
+                             arch-file-name))
          (verbose? (count-opt options 'verbose)))
     (let ((file (search-path path arch-file-name)))
       (when (and verbose? (> verbose? 1))
       (or file
           (error (format #f "mescc: file not found: ~s" arch-file-name))))))
 
+(define (kernel-find options file-name)
+  (let ((kernel (option-ref options 'kernel "linux")))
+    (or (arch-find options file-name #:kernel kernel)
+        (arch-find options file-name))))
+
 (define (assert-system* . args)
   (let ((status (apply system* args)))
     (when (not (zero? status))
 
 (define (mescc:get-host options)
   (let ((cpu (arch-get options))
-        (kernel "linux"))
+        (kernel (option-ref options 'kernel "linux")))
     (string-join (list cpu kernel "mes") "-")))
 
 (define (arch-get-info options)
index e1d91eace483a2e225b664d63f2e6a49a91c4168..0fa613a512964f12b8f61550c2d191024dada869 100644 (file)
 (cond-expand
  (mes)
  (guile
-  (define %arch (car (string-split %host-type #\-)))))
+  (define %arch (car (string-split %host-type #\-)))
+  (define %kernel (car (filter
+                        (compose not
+                                 (lambda (x) (member x '("pc" "portbld" "unknown"))))
+                        (cdr (string-split %host-type #\-)))))))
 
 (define %prefix (or (getenv "MES_PREFIX")
                       (if (string-prefix? "@prefix" "@prefix@")
@@ -41,6 +45,9 @@
 (define %arch (if (string-prefix? "@mes_cpu" "@mes_cpu@") %arch
                   "@mes_cpu@"))
 
+(define %kernel (if (string-prefix? "@mes_kernel" "@mes_kernel@") %kernel
+                    "@mes_kernel@"))
+
 (define %numbered-arch? (if (getenv "numbered_arch") (and=> (getenv "numbered_arch")
                                                             (lambda (x) (equal? x "true")))
                             (if (string-prefix? "@numbered_arch" "@numbered_arch@") #f
@@ -51,6 +58,7 @@
 (setenv "%libdir" %libdir)
 (setenv "%version" %version)
 (setenv "%arch" %arch)
+(setenv "%kernel" %kernel)
 (setenv "%numbered_arch" (if %numbered-arch? "true" "false"))
 
 (cond-expand