Add mes and mescc-tools-extra

mescc-tools-extra contains two important tools:
- cp
- chmod

mes first builds itself from a mes 0.21 seed as used by guix, and then
builds a mes 0.22 and then mes 0.22 using that created mes 0.22.

It does /not/ use bootstrap.sh as we don't have a proper shell at this
point, it has been manually adapted for kaem.
This commit is contained in:
fosslinux 2020-12-25 18:40:14 +11:00
parent 2706e07556
commit 649d7b68dc
1029 changed files with 120985 additions and 18 deletions

View file

@ -0,0 +1,79 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 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/>.
*/
#include "mes/lib-mini.h"
int main (int argc, char *argv[], char *envp[]);
int
_start ()
{
asm ("mov____$i8,%rax !0");
asm ("movl___%eax,0x32 &__stdin");
asm ("mov____$i8,%rax !1");
asm ("movl___%eax,0x32 &__stdout");
asm ("mov____$i8,%rax !2");
asm ("movl___%eax,0x32 &__stderr");
#if 0 //MES_CCAMD64
asm ("add____$i32,%rbp %0x80"); // FIXME: corresponds to x86_64/as.scm function-preamble-fu
#endif
asm ("mov____%rbp,%rax");
asm ("add____$i8,%rax !8");
asm ("mov____(%rax),%rax");
asm ("add____$i8,%rax !0x03");
asm ("shl____$i8,%rax !0x03");
asm ("add____%rbp,%rax");
// FIXME: 64-bit addresses...
asm ("mov____%rax,0x32 &environ");
#if 0 //MES_CCAMD64
asm ("mov____%rax,%rdx"); // amd
#else
asm ("push___%rax"); // bootstrap
#endif
asm ("mov____%rbp,%rax");
asm ("add____$i8,%rax !16");
#if 0 //MES_CCAMD64
asm ("mov____%rax,%rsi"); // amd
#else
asm ("push___%rax"); // bootstrap
#endif
asm ("mov____%rbp,%rax");
asm ("add____$i8,%rax !8");
asm ("mov____(%rax),%rax");
#if 0 //MES_CCAMD64
asm ("mov____%rax,%rdi"); // amd
#else
asm ("push___%rax"); // bootstrap
#endif
main ();
asm ("mov____%rax,%rdi");
asm ("mov____$i32,%rax %0x3c");
asm ("syscall");
asm ("hlt");
}

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,45 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 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/>.
*/
#include "mes/lib-mini.h"
void
_exit (int status)
{
#if 1 // !MES_CCAMD64
asm ("mov____0x8(%rbp),%rdi !0x10");
#endif
asm ("mov____$i32,%rax SYS_exit");
asm ("syscall");
}
void
_write (int filedes, void const *buffer, size_t size)
{
#if 1 // !MES_CCAMD64
asm ("mov____0x8(%rbp),%rdi !0x10");
asm ("mov____0x8(%rbp),%rsi !0x18");
asm ("mov____0x8(%rbp),%rdx !0x20");
#endif
asm ("mov____$i32,%rax SYS_write");
asm ("syscall");
}

View file

@ -0,0 +1,123 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2016,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/>.
*/
#include <errno.h>
#include <linux/x86_64/syscall.h>
long
//__sys_call (long one, long two, long three, long four)
__sys_call (long sys_call, long one, long two, long three, long four)
{
#if 1 // !MES_CCAMD64
// asm ("mov____0x8(%rbp),%rdi !0x10");
// asm ("mov____0x8(%rbp),%rsi !0x18");
// asm ("mov____0x8(%rbp),%rdx !0x20");
// asm ("mov____0x8(%rbp),%rdx !0x28");
// asm ("mov____0x8(%rbp),%r10 !0x30");
asm ("mov____0x8(%rbp),%rax !0x10");
asm ("mov____0x8(%rbp),%rdi !0x18");
asm ("mov____0x8(%rbp),%rsi !0x20");
asm ("mov____0x8(%rbp),%rdx !0x28");
asm ("mov____0x8(%rbp),%r10 !0x30");
#endif
asm ("syscall");
}
long
_sys_call (long sys_call)
{
// long rax = sys_call;
// long r = __sys_call ();
long r = __sys_call (sys_call);
if (r < 0)
{
errno = -r;
r = -1;
}
else
errno = 0;
return r;
}
long
_sys_call1 (long sys_call, long one)
{
// long rax = sys_call;
// long r = __sys_call (one);
long r = __sys_call (sys_call, one);
if (r < 0)
{
errno = -r;
r = -1;
}
else
errno = 0;
return r;
}
long
_sys_call2 (long sys_call, long one, long two)
{
// long rax = sys_call;
// long r = __sys_call (one, two);
long r = __sys_call (sys_call, one, two);
if (r < 0)
{
errno = -r;
r = -1;
}
else
errno = 0;
return r;
}
long
_sys_call3 (long sys_call, long one, long two, long three)
{
// long rax = sys_call;
// long r = __sys_call (one, two, three);
long r = __sys_call (sys_call, one, two, three);
if (r < 0)
{
errno = -r;
r = -1;
}
else
errno = 0;
return r;
}
long
_sys_call4 (long sys_call, long one, long two, long three, long four)
{
// long rax = sys_call;
// long r = __sys_call (one, two, three, four);
long r = __sys_call (sys_call, one, two, three, four);
if (r < 0)
{
errno = -r;
r = -1;
}
else
errno = 0;
return r;
}