mescc: Initial x86_64-mes scaffold.
authorJan Nieuwenhuizen <janneke@gnu.org>
Fri, 10 Aug 2018 09:15:43 +0000 (11:15 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Fri, 10 Aug 2018 09:15:43 +0000 (11:15 +0200)
* build-aux/GNUmakefile.in (x86_64-mes): New target.
* .gitignore: Ignore x86 and x86_64 out files.
* build-aux/build-mes.sh: Resurrect three initial exit42 scaffold tests.
* build-aux/build-x86_64-mes.sh: New file.  Add initial exit42
  scaffold test.
* lib/x86-mes/elf32-0header.hex2: Fix comment.
* lib/x86-mes/elf32-header.hex2: Likewise.
* lib/x86_64-mes/elf-0footer.hex2: New file.
* lib/x86_64-mes/elf64-0header.hex2: New file.
* lib/x86_64-mes/elf64-body-exit-42.hex2: New file.
* lib/x86_64-mes/exit-42.c: New file.

12 files changed:
.gitignore
build-aux/GNUmakefile.in
build-aux/build-mes.sh
build-aux/build-x86_64-mes.sh [new file with mode: 0755]
build-aux/cc-mes.sh
lib/x86-mes/elf32-0header.hex2
lib/x86-mes/elf32-body-exit-42.hex2
lib/x86-mes/elf32-header.hex2
lib/x86_64-mes/elf-0footer.hex2 [new file with mode: 0644]
lib/x86_64-mes/elf64-0header.hex2 [new file with mode: 0644]
lib/x86_64-mes/elf64-body-exit-42.hex2 [new file with mode: 0644]
lib/x86_64-mes/exit-42.c [new file with mode: 0644]

index 7c208c5de6996c2993458fd5706b61296edb100b..beb36099792c48583d185dc0e41960c99334932d 100644 (file)
 *.mes-gcc-out
 *.mes-gcc-out
 *.mes-gcc-stdout
+*.mes-o
+*.mes-out
+*.mes-stdout
 *.mes-tcc
 *.mes-tcc-o
 *.mes-tcc-out
 *.mes-tcc-out
 *.mes-tcc-stdout
-*.mes-o
-*.mes-out
-*.mes-stdout
 *.mini-M1
 *.mini-guile
 *.mini-hex2
@@ -34,6 +34,9 @@
 *.seed-out
 *.stderr
 *.stdout
+*.x86-out
+*.x86_64-mes-out
+*.x86_64-out
 
 /lib/x86-mes-gcc
 /lib/x86-mes-tcc
index 607a5a074f2568e458c878792a2f65044653e60d..8965b9256a91c18f6e7db36437ca39a41cfd4cc7 100644 (file)
@@ -101,6 +101,9 @@ endif
 mes:
        ${srcdest}build-aux/build-mes.sh
 
+x86_64-mes:
+       ${srcdest}build-aux/build-x86_64-mes.sh
+
 clean:
        git clean -dfx\
            -e GNUmakefile\
index 99fc0f3cede67c25ae300add3449a5f0d939e41b..8517d2c8598722eb937efe715fab3153e06c2d16 100755 (executable)
@@ -32,6 +32,34 @@ MES=${MES-$(command -v mes)}
 
 set -e
 
+trace "HEX2 0exit-42" $HEX2\
+    --LittleEndian\
+    --Architecture 1\
+    --BaseAddress 0x1000000\
+    -f ${srcdest}lib/x86-mes/elf32-0header.hex2\
+    -f ${srcdest}lib/x86-mes/elf32-body-exit-42.hex2\
+    -f ${srcdest}lib/x86-mes/elf-0footer.hex2\
+    --exec_enable\
+    -o lib/x86-mes/0exit-42.x86-out
+
+trace "TEST 0exit-42"
+{ set +e; lib/x86-mes/0exit-42.x86-out; r=$?; set -e; }
+[ $r != 42 ] && echo "  => $r" && exit 1
+
+trace "HEX2 0exit-42" $HEX2\
+    --LittleEndian\
+    --Architecture 1\
+    --BaseAddress 0x1000000\
+    -f ${srcdest}lib/x86-mes/elf32-header.hex2\
+    -f ${srcdest}lib/x86-mes/elf32-body-exit-42.hex2\
+    -f ${srcdest}lib/x86-mes/elf32-footer-single-main.hex2\
+    --exec_enable\
+    -o lib/x86-mes/exit-42.x86-out
+
+trace "TEST exit-42"
+{ set +e; lib/x86-mes/exit-42.x86-out; r=$?; set -e; }
+[ $r != 42 ] && echo "  => $r" && exit 1
+
 if [ -d "$MES_SEED" ]; then
     mkdir -p lib/x86-mes
     trace "M1 crt1.S" $M1\
@@ -87,15 +115,24 @@ fi
 
 MES_ARENA=100000000
 ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/linux/crt0
+ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/libc-mini
+
+PREPROCESS= bash ${srcdest}build-aux/cc-mes.sh lib/x86-mes/exit-42
+
+trace "TEST exit-42.out"
+{ set +e; lib/x86-mes/exit-42.mes-out; r=$?; set -e; }
+[ $r != 42 ] && echo "  => $r" && exit 1
+
 ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/linux/crt1
 ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/linux/crti
 ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/linux/crtn
-ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/libc-mini
+
 ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/libc
 ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/libgetopt
 ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/libc+tcc
 ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/libc+gnu
 
+
 [ -n "$SEED" ] && exit 0
 
 MES_ARENA=${MES_ARENA-100000000}
diff --git a/build-aux/build-x86_64-mes.sh b/build-aux/build-x86_64-mes.sh
new file mode 100755 (executable)
index 0000000..2144f81
--- /dev/null
@@ -0,0 +1,159 @@
+#! /bin/sh
+
+# GNU Mes --- Maxwell Equations of Software
+# Copyright © 2017,2018 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/>.
+
+. ${srcdest}build-aux/config.sh
+. ${srcdest}build-aux/trace.sh
+
+GUILE=${GUILE-guile}
+if [ -z "$GUILE" -o "$GUILE" = "true" ] || ! command -v $GUILE > /dev/null; then
+    GUILE=src/mes
+fi
+
+[ -z "$MESCC" ] && MESCC=scripts/mescc
+MES=${MES-$(command -v mes)}
+[ -z "$MES" ] && MES=src/mes
+
+set -e
+
+trace "HEX2 0exit-42" $HEX2\
+    --LittleEndian\
+    --Architecture 2\
+    --BaseAddress 0x1000000\
+    -f ${srcdest}lib/x86_64-mes/elf64-0header.hex2\
+    -f ${srcdest}lib/x86_64-mes/elf64-body-exit-42.hex2\
+    -f ${srcdest}lib/x86_64-mes/elf-0footer.hex2\
+    --exec_enable\
+    -o lib/x86_64-mes/0exit-42.x86_64-out
+
+trace "TEST 0exit-42"
+{ set +e; lib/x86_64-mes/0exit-42.x86_64-out; r=$?; set -e; }
+[ $r != 42 ] && echo "  => $r" && exit 1
+
+# trace "HEX2 0exit-42" $HEX2\
+#     --LittleEndian\
+#     --Architecture 2\
+#     --BaseAddress 0x1000000\
+#     -f ${srcdest}lib/x86_64-mes/elf64-header.hex2\
+#     -f ${srcdest}lib/x86_64-mes/elf64-body-exit-42.hex2\
+#     -f ${srcdest}lib/x86_64-mes/elf64-footer-single-main.hex2\
+#     --exec_enable\
+#     -o lib/x86_64-mes/exit-42.x86_64-out
+
+# trace "TEST exit-42"
+# { set +e; lib/x86_64-mes/exit-42.x86_64-out; r=$?; set -e; }
+# [ $r != 42 ] && echo "  => $r" && exit 1
+
+# if [ -d "$MES_SEED" ]; then
+#     mkdir -p lib/x86_64-mes
+#     trace "M1 crt1.S" $M1\
+#         $M1FLAGS\
+#         -f ${srcdest}lib/x86_64-mes/x86_64.M1\
+#         -f $MES_SEED/x86_64-mes/crt1.S\
+#         -o lib/x86_64-mes/crt1.o
+#     trace "M1 libc.S" $M1\
+#         $M1FLAGS\
+#         -f ${srcdest}lib/x86_64-mes/x86_64.M1\
+#         -f $MES_SEED/x86_64-mes/libc.S\
+#         -o lib/x86_64-mes/libc.o
+#     trace "M1 mes.S" $M1\
+#         --LittleEndian\
+#         --Architecture 2\
+#         -f ${srcdest}lib/x86_64-mes/x86_64.M1\
+#         -f $MES_SEED/x86_64-mes/mes.S\
+#         -o src/mes.o
+#     trace "BLOOD_ELF mes.S" $BLOOD_ELF\
+#         -f ${srcdest}lib/x86_64-mes/x86_64.M1\
+#         -f $MES_SEED/x86_64-mes/mes.S\
+#         -f $MES_SEED/x86_64-mes/libc.S\
+#         -o src/mes.S.blood-elf
+#     trace "M1 mes.blood-elf" $M1\
+#         --LittleEndian\
+#         --Architecture 2\
+#         -f src/mes.S.blood-elf\
+#         -o src/mes.o.blood-elf
+#     trace "HEX2 mes.o" $HEX2\
+#         $HEX2FLAGS\
+#         -f ${srcdest}lib/x86_64-mes/elf64-header.hex2\
+#         -f lib/x86_64-mes/crt1.o\
+#         -f lib/x86_64-mes/libc.o\
+#         -f src/mes.o\
+#         -f src/mes.o.blood-elf\
+#         --exec_enable\
+#         -o src/mes.seed-out
+#     cp src/mes.seed-out src/mes
+#     trace "M1 libc+tcc.S" $M1\
+#         $M1FLAGS\
+#         -f ${srcdest}lib/x86_64-mes/x86_64.M1\
+#         -f $MES_SEED/x86_64-mes/libc+tcc.S\
+#         -o lib/x86_64-mes/libc+tcc.o
+# fi
+
+# PREPROCESS=1
+# if [ ! -d "$MES_SEED" ] \
+#        && [ "$ARCH" = "i386" \
+#             -o "$ARCH" = "i586" \
+#             -o "$ARCH" = "i686" ]; then
+#     MES_ARENA=100000000
+# fi
+
+# MES_ARENA=100000000
+# ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/linux/crt0
+# ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/libc-mini
+
+# PREPROCESS= bash ${srcdest}build-aux/cc-mes.sh lib/x86_64-mes/exit-42
+
+# trace "TEST exit-42.x86_64-mes-out"
+# { set +e; lib/x86_64-mes/exit-42.x86_64-mes-out; r=$?; set -e; }
+# [ $r != 42 ] && echo "  => $r" && exit 1
+
+# ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/linux/crt1
+# ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/linux/crti
+# ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/linux/crtn
+
+# ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/libc
+# ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/libgetopt
+# ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/libc+tcc
+# ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/libc+gnu
+
+
+# [ -n "$SEED" ] && exit 0
+
+# MES_ARENA=${MES_ARENA-100000000}
+# trace "MSNARF gc.c"     ./pre-inst-env bash ${srcdest}build-aux/mes-snarf.scm --mes src/gc.c
+# trace "MSNARF lib.c"    ./pre-inst-env bash ${srcdest}build-aux/mes-snarf.scm --mes src/lib.c
+# trace "MSNARF math.c"   ./pre-inst-env bash ${srcdest}build-aux/mes-snarf.scm --mes src/math.c
+# trace "MSNARF mes.c"    ./pre-inst-env bash ${srcdest}build-aux/mes-snarf.scm --mes src/mes.c
+# trace "MSNARF posix.c"  ./pre-inst-env bash ${srcdest}build-aux/mes-snarf.scm --mes src/posix.c
+# trace "MSNARF reader.c" ./pre-inst-env bash ${srcdest}build-aux/mes-snarf.scm --mes src/reader.c
+# trace "MSNARF vector.c" ./pre-inst-env bash ${srcdest}build-aux/mes-snarf.scm --mes src/vector.c
+
+# echo MES_ARENA=$MES_ARENA
+# bash ${srcdest}build-aux/cc-mes.sh scaffold/main
+
+# bash ${srcdest}build-aux/cc-mes.sh scaffold/main
+# bash ${srcdest}build-aux/cc-mes.sh scaffold/hello
+# bash ${srcdest}build-aux/cc-mes.sh scaffold/argv
+# bash ${srcdest}build-aux/cc-mes.sh scaffold/malloc
+# ##sh ${srcdest}build-aux/cc-mes.sh scaffold/micro-mes
+# ##sh ${srcdest}build-aux/cc-mes.sh scaffold/tiny-mes
+# # bash ${srcdest}build-aux/cc-mes.sh scaffold/mini-mes
+# bash ${srcdest}build-aux/cc-mes.sh src/mes
+# cp src/mes.mes-out src/mes
+true
index aa300902a103926535aac973c6e8cba5c63c66e2..c6f53a2b8536560bf993c14605db59e36b6d336d 100755 (executable)
@@ -61,7 +61,7 @@ elif [ -n "$COMPILE" ]; then
         trace "MESLD $c.o" ./pre-inst-env bash $MESCC $MES_CFLAGS -o "$o".${p}out "$o".${p}o $MES_LIBS
     fi
 elif [ -z "$NOLINK" ]; then
-    trace "MESLD $c.c" ./pre-inst-env bash $MESCC $MES_CPPFLAGS $MES_CFLAGS -o "$o".${p}out "${srcdest}$c".c $MES_LIBS
+    trace "MESCC $c.c" ./pre-inst-env bash $MESCC $MES_CPPFLAGS $MES_CFLAGS -o "$o".${p}out "${srcdest}$c".c $MES_LIBS
 else
    trace "MESCC $c.c" ./pre-inst-env bash $MESCC $MES_CPPFLAGS $MES_CFLAGS -c -o "$o".${p}o "${srcdest}$c".c
 fi
index 36e584a1c3a694fa4941e79e948cf8001f392a62..ec279620339c5d7bced71adc8d774773c2dc5680 100644 (file)
@@ -39,7 +39,7 @@
 00 00 00 00 00 00 00           # e_ident[EI_PAD]
 
 02 00                          # e_type Indicating Executable
-03 00                          # e_machine Indicating AMD64
+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
index 130f69b0d1e37a8dcc878b584adef20b10de47f9..b884ec3d107e686fe09d720dd8f2eb38b02d9c0b 100644 (file)
@@ -45,4 +45,3 @@ cd 80                          # int    $0x80
 # @220
 :ELF_data
 65 78 69 74 34 32 20 64 61 74 61 20 68 65 72 65 # exit42 data here"
-
index 406457e31bc748aa89144b083df121e6baa0c9e7..28f5a4c4a4fe31d65e734c152b14e850126185e9 100644 (file)
@@ -39,7 +39,7 @@
 00 00 00 00 00 00 00           # e_ident[EI_PAD]
 
 02 00                          # e_type Indicating Executable
-03 00                          # e_machine Indicating AMD64
+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
diff --git a/lib/x86_64-mes/elf-0footer.hex2 b/lib/x86_64-mes/elf-0footer.hex2
new file mode 100644 (file)
index 0000000..28a2fa0
--- /dev/null
@@ -0,0 +1,26 @@
+### Copyright (C) 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+### This file is part of stage0.
+###
+### stage0 is free software: you an 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>
+
+:ELF_end
diff --git a/lib/x86_64-mes/elf64-0header.hex2 b/lib/x86_64-mes/elf64-0header.hex2
new file mode 100644 (file)
index 0000000..ac0f003
--- /dev/null
@@ -0,0 +1,78 @@
+### Copyright (C) 2016 Jeremiah Orians
+### Copyright (C) 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+### This file is part of stage0.
+###
+### stage0 is free software: you an 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>
+
+: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
+
+# @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
+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
+
+:ELF_text
diff --git a/lib/x86_64-mes/elf64-body-exit-42.hex2 b/lib/x86_64-mes/elf64-body-exit-42.hex2
new file mode 100644 (file)
index 0000000..d0ed342
--- /dev/null
@@ -0,0 +1,47 @@
+### Copyright (C) 2017, 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+### This file is part of stage0.
+###
+### stage0 is free software: you an 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>
+
+### elf64-body-exit-42.hex2: 64 bit elf body in hex2 for `exit 42'
+
+# @200
+:ELF_text
+:_start
+# exit(42)
+e8 %main                       # callq  +11 <main>
+00 00 00
+00 00 00 00
+00 00 00 00
+
+# @210
+:main
+48 c7 c7 2a 00 00 00           # mov    $42,%rdi
+48 c7 c0 3c 00 00 00           # mov    $0x3c,%rax
+0f 05                          # syscall
+
+00 00 00 00
+
+# @220
+:ELF_data
+65 78 69 74 34 32 20 64 61 74 61 20 68 65 72 65 # exit42 data here"
diff --git a/lib/x86_64-mes/exit-42.c b/lib/x86_64-mes/exit-42.c
new file mode 100644 (file)
index 0000000..8e0b35f
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main (int argc, char *argv[])
+{
+#if 1
+  asm ("mov $00,%rdi");
+  asm ("mov $0x3c,%rax");
+  asm ("syscall");
+#endif
+  return 42;
+}