mescc: Initial x86_64-mes scaffold.
* 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.
This commit is contained in:
parent
959525330c
commit
521f97dfb3
9
.gitignore
vendored
9
.gitignore
vendored
|
@ -19,14 +19,14 @@
|
||||||
*.mes-gcc-out
|
*.mes-gcc-out
|
||||||
*.mes-gcc-out
|
*.mes-gcc-out
|
||||||
*.mes-gcc-stdout
|
*.mes-gcc-stdout
|
||||||
|
*.mes-o
|
||||||
|
*.mes-out
|
||||||
|
*.mes-stdout
|
||||||
*.mes-tcc
|
*.mes-tcc
|
||||||
*.mes-tcc-o
|
*.mes-tcc-o
|
||||||
*.mes-tcc-out
|
*.mes-tcc-out
|
||||||
*.mes-tcc-out
|
*.mes-tcc-out
|
||||||
*.mes-tcc-stdout
|
*.mes-tcc-stdout
|
||||||
*.mes-o
|
|
||||||
*.mes-out
|
|
||||||
*.mes-stdout
|
|
||||||
*.mini-M1
|
*.mini-M1
|
||||||
*.mini-guile
|
*.mini-guile
|
||||||
*.mini-hex2
|
*.mini-hex2
|
||||||
|
@ -34,6 +34,9 @@
|
||||||
*.seed-out
|
*.seed-out
|
||||||
*.stderr
|
*.stderr
|
||||||
*.stdout
|
*.stdout
|
||||||
|
*.x86-out
|
||||||
|
*.x86_64-mes-out
|
||||||
|
*.x86_64-out
|
||||||
|
|
||||||
/lib/x86-mes-gcc
|
/lib/x86-mes-gcc
|
||||||
/lib/x86-mes-tcc
|
/lib/x86-mes-tcc
|
||||||
|
|
|
@ -101,6 +101,9 @@ endif
|
||||||
mes:
|
mes:
|
||||||
${srcdest}build-aux/build-mes.sh
|
${srcdest}build-aux/build-mes.sh
|
||||||
|
|
||||||
|
x86_64-mes:
|
||||||
|
${srcdest}build-aux/build-x86_64-mes.sh
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
git clean -dfx\
|
git clean -dfx\
|
||||||
-e GNUmakefile\
|
-e GNUmakefile\
|
||||||
|
|
|
@ -32,6 +32,34 @@ MES=${MES-$(command -v mes)}
|
||||||
|
|
||||||
set -e
|
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
|
if [ -d "$MES_SEED" ]; then
|
||||||
mkdir -p lib/x86-mes
|
mkdir -p lib/x86-mes
|
||||||
trace "M1 crt1.S" $M1\
|
trace "M1 crt1.S" $M1\
|
||||||
|
@ -87,15 +115,24 @@ fi
|
||||||
|
|
||||||
MES_ARENA=100000000
|
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/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/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/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/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/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/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+tcc
|
||||||
ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/libc+gnu
|
ARCHDIR=1 NOLINK=1 bash ${srcdest}build-aux/cc-mes.sh lib/libc+gnu
|
||||||
|
|
||||||
|
|
||||||
[ -n "$SEED" ] && exit 0
|
[ -n "$SEED" ] && exit 0
|
||||||
|
|
||||||
MES_ARENA=${MES_ARENA-100000000}
|
MES_ARENA=${MES_ARENA-100000000}
|
||||||
|
|
159
build-aux/build-x86_64-mes.sh
Executable file
159
build-aux/build-x86_64-mes.sh
Executable file
|
@ -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
|
|
@ -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
|
trace "MESLD $c.o" ./pre-inst-env bash $MESCC $MES_CFLAGS -o "$o".${p}out "$o".${p}o $MES_LIBS
|
||||||
fi
|
fi
|
||||||
elif [ -z "$NOLINK" ]; then
|
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
|
else
|
||||||
trace "MESCC $c.c" ./pre-inst-env bash $MESCC $MES_CPPFLAGS $MES_CFLAGS -c -o "$o".${p}o "${srcdest}$c".c
|
trace "MESCC $c.c" ./pre-inst-env bash $MESCC $MES_CPPFLAGS $MES_CFLAGS -c -o "$o".${p}o "${srcdest}$c".c
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
00 00 00 00 00 00 00 # e_ident[EI_PAD]
|
00 00 00 00 00 00 00 # e_ident[EI_PAD]
|
||||||
|
|
||||||
02 00 # e_type Indicating Executable
|
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
|
01 00 00 00 # e_version Indicating original elf
|
||||||
|
|
||||||
&ELF_text # e_entry Address of the entry point
|
&ELF_text # e_entry Address of the entry point
|
||||||
|
|
|
@ -45,4 +45,3 @@ cd 80 # int $0x80
|
||||||
# @220
|
# @220
|
||||||
:ELF_data
|
:ELF_data
|
||||||
65 78 69 74 34 32 20 64 61 74 61 20 68 65 72 65 # exit42 data here"
|
65 78 69 74 34 32 20 64 61 74 61 20 68 65 72 65 # exit42 data here"
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
00 00 00 00 00 00 00 # e_ident[EI_PAD]
|
00 00 00 00 00 00 00 # e_ident[EI_PAD]
|
||||||
|
|
||||||
02 00 # e_type Indicating Executable
|
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
|
01 00 00 00 # e_version Indicating original elf
|
||||||
|
|
||||||
&ELF_text # e_entry Address of the entry point
|
&ELF_text # e_entry Address of the entry point
|
||||||
|
|
26
lib/x86_64-mes/elf-0footer.hex2
Normal file
26
lib/x86_64-mes/elf-0footer.hex2
Normal file
|
@ -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
|
78
lib/x86_64-mes/elf64-0header.hex2
Normal file
78
lib/x86_64-mes/elf64-0header.hex2
Normal file
|
@ -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
|
47
lib/x86_64-mes/elf64-body-exit-42.hex2
Normal file
47
lib/x86_64-mes/elf64-body-exit-42.hex2
Normal file
|
@ -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"
|
30
lib/x86_64-mes/exit-42.c
Normal file
30
lib/x86_64-mes/exit-42.c
Normal file
|
@ -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;
|
||||||
|
}
|
Loading…
Reference in a new issue