x86_64: build: Cater for M2-Planet.
* build-aux/cflags.sh: Set cc_cpu. * build-aux/config.sh.in (cc_cpu): Export. * build-aux/export.make (cc_cpu): Likewise. * kaem.arm (cc_cpu): New variable. * kaem.x86 (cc_cpu): New variable. * kaem.run (cc_cpu): New variable. Define __<cc_cpu>__. * scaffold/argv.kaem (cc_cpu): Likewise. Define __linux__ * scaffold/global-array.kaem (cc_cpu): Likewise. * scaffold/hello.kaem (cc_cpu): Likewise. * scaffold/local-array.kaem (cc_cpu): Likewise. * scaffold/local-static-array.kaem (cc_cpu): Likewise. * scaffold/main.kaem (cc_cpu): Likewise. * scaffold/read.kaem (cc_cpu): Likewise. * kaem.x86_64: New file. lib/m2/x86_64/ELF-x86_64.hex2, lib/m2/x86_64/x86_64_defs.M1: New files, imported from M2Libc. lib/linux/x86_64-mes-m2/_exit.c, lib/linux/x86_64-mes-m2/_write.c, lib/linux/x86_64-mes-m2/crt1.M1, lib/linux/x86_64-mes-m2/crt1.c, lib/linux/x86_64-mes-m2/syscall.c: New files, adapted for M2-Planet calling convention from ... * lib/linux/x86_64-mes-mescc: ... here. * build-aux/build.sh.in: Also allow kaem build for x86_64. * include/mes/lib-mini.h[__M2__]: Define as sizeof (void*). * include/mes/mes.h[__M2__](M2_CELL_SIZE): Define as sizeof (struct scm). * lib/x86_64-mes/x86_64.M1 (add____$i8,%rbp, mov____%rdi,%rbp): New defines. * src/posix.c (TIME_UNITS_PER_SECOND): Cater for 64bit M2-Planet.
This commit is contained in:
parent
002dc6253a
commit
189ea8eb9d
|
@ -102,6 +102,7 @@ fi
|
|||
)
|
||||
|
||||
if test -n "$M2_PLANET" && (test "$mes_cpu" == "x86" \
|
||||
|| test "$mes_cpu" == "x86_64" \
|
||||
|| test "$mes_cpu" == "arm" ); then
|
||||
(
|
||||
. ${srcdest}build-aux/trace.sh
|
||||
|
|
|
@ -18,16 +18,20 @@
|
|||
|
||||
case "$mes_cpu" in
|
||||
arm)
|
||||
cc_cpu=arm
|
||||
stage0_cpu=armv7l
|
||||
;;
|
||||
x86_64)
|
||||
cc_cpu=x86_64
|
||||
stage0_cpu=amd64
|
||||
;;
|
||||
x86)
|
||||
cc_cpu=i386
|
||||
stage0_cpu=x86
|
||||
;;
|
||||
*)
|
||||
stage0_cpu=$mes_cpu
|
||||
cc_cpu=$mes_cpu
|
||||
;;
|
||||
esac
|
||||
|
||||
|
|
|
@ -97,6 +97,7 @@ export CC
|
|||
export DIFF
|
||||
export SHELL
|
||||
export V
|
||||
export cc_cpu
|
||||
export colors
|
||||
export compiler
|
||||
export courageous
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# GNU Mes --- Maxwell Equations of Software
|
||||
# Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
# Copyright © 2018,2023 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
#
|
||||
# This file is part of GNU Mes.
|
||||
#
|
||||
|
@ -43,6 +43,7 @@ export moduledir
|
|||
export sysconfdir
|
||||
|
||||
export bootstrap
|
||||
export cc_cpu
|
||||
export compiler
|
||||
export courageous
|
||||
export mes_system
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
for that by multiplying with M2_PTR_SIZE when using (char)
|
||||
pointers. */
|
||||
#if __M2__
|
||||
#define M2_PTR_SIZE 4
|
||||
#define M2_PTR_SIZE sizeof (void*)
|
||||
#else
|
||||
#define M2_PTR_SIZE 1
|
||||
#endif
|
||||
|
|
|
@ -57,7 +57,7 @@ struct scm
|
|||
for that by multiplying with M2_CELL_SIZE when using cell
|
||||
pointers. */
|
||||
#if __M2__
|
||||
#define M2_CELL_SIZE 12
|
||||
#define M2_CELL_SIZE sizeof (struct scm)
|
||||
#else
|
||||
#define M2_CELL_SIZE 1
|
||||
#endif
|
||||
|
|
1
kaem.arm
1
kaem.arm
|
@ -19,6 +19,7 @@
|
|||
# Usage:
|
||||
# kaem --verbose --strict
|
||||
|
||||
cc_cpu=arm
|
||||
mes_cpu=arm
|
||||
stage0_cpu=armv7l
|
||||
kaem --verbose --strict
|
||||
|
|
2
kaem.run
2
kaem.run
|
@ -19,6 +19,7 @@
|
|||
# Usage:
|
||||
# kaem --verbose --strict
|
||||
|
||||
cc_cpu=${cc_cpu:-i386}
|
||||
mes_cpu=${mes_cpu:-x86}
|
||||
stage0_cpu=${stage0_cpu:-x86}
|
||||
|
||||
|
@ -27,6 +28,7 @@ mkdir -p m2
|
|||
M2-Planet \
|
||||
--debug \
|
||||
--architecture ${stage0_cpu} \
|
||||
-D __${cc_cpu}__=1 \
|
||||
-D __linux__=1 \
|
||||
-f include/mes/config.h \
|
||||
-f include/mes/lib-mini.h \
|
||||
|
|
1
kaem.x86
1
kaem.x86
|
@ -19,6 +19,7 @@
|
|||
# Usage:
|
||||
# kaem --verbose --strict
|
||||
|
||||
cc_cpu=i386
|
||||
mes_cpu=x86
|
||||
stage0_cpu=x86
|
||||
kaem --verbose --strict
|
||||
|
|
25
kaem.x86_64
Normal file
25
kaem.x86_64
Normal file
|
@ -0,0 +1,25 @@
|
|||
#! /bin/sh
|
||||
# Copyright © 2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
#
|
||||
# This file is part of GNU Mes.
|
||||
#
|
||||
# GNU Mes is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or (at
|
||||
# your option) any later version.
|
||||
#
|
||||
# GNU Mes is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# Usage:
|
||||
# kaem --verbose --strict
|
||||
|
||||
cc_cpu=x86_64
|
||||
mes_cpu=x86_64
|
||||
stage0_cpu=amd64
|
||||
kaem --verbose --strict
|
29
lib/linux/x86_64-mes-m2/_exit.c
Normal file
29
lib/linux/x86_64-mes-m2/_exit.c
Normal file
|
@ -0,0 +1,29 @@
|
|||
/* -*-comment-start: "//";comment-end:""-*-
|
||||
* GNU Mes --- Maxwell Equations of Software
|
||||
* Copyright © 2018,2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
*
|
||||
* This file is part of GNU Mes.
|
||||
*
|
||||
* GNU Mes is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or (at
|
||||
* your option) any later version.
|
||||
*
|
||||
* GNU Mes is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "mes/lib-mini.h"
|
||||
|
||||
void
|
||||
_exit (int status)
|
||||
{
|
||||
asm ("mov____$i32,%rax SYS_exit");
|
||||
asm ("mov____0x8(%rbp),%rdi !-8");
|
||||
asm ("syscall");
|
||||
}
|
31
lib/linux/x86_64-mes-m2/_write.c
Normal file
31
lib/linux/x86_64-mes-m2/_write.c
Normal file
|
@ -0,0 +1,31 @@
|
|||
/* -*-comment-start: "//";comment-end:""-*-
|
||||
* GNU Mes --- Maxwell Equations of Software
|
||||
* Copyright © 2018,2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
*
|
||||
* This file is part of GNU Mes.
|
||||
*
|
||||
* GNU Mes is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or (at
|
||||
* your option) any later version.
|
||||
*
|
||||
* GNU Mes is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "mes/lib-mini.h"
|
||||
|
||||
void
|
||||
_write (int filedes, void const *buffer, size_t size)
|
||||
{
|
||||
asm ("mov____$i32,%rax SYS_write");
|
||||
asm ("mov____0x8(%rbp),%rdi !-8");
|
||||
asm ("mov____0x8(%rbp),%rsi !-16");
|
||||
asm ("mov____0x8(%rbp),%rdx !-24");
|
||||
asm ("syscall");
|
||||
}
|
56
lib/linux/x86_64-mes-m2/crt1.M1
Normal file
56
lib/linux/x86_64-mes-m2/crt1.M1
Normal file
|
@ -0,0 +1,56 @@
|
|||
### GNU Mes --- Maxwell Equations of Software
|
||||
### Copyright © 2017,2018,2019,2022,2023 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/>.
|
||||
|
||||
:_start
|
||||
push___%rbp
|
||||
mov____%rsp,%rbp
|
||||
|
||||
;; mes c lib io
|
||||
mov____$i8,%rax !0
|
||||
movl___%eax,0x32 &GLOBAL___stdin
|
||||
mov____$i8,%rax !1
|
||||
movl___%eax,0x32 &GLOBAL___stdout
|
||||
mov____$i8,%rax !2
|
||||
movl___%eax,0x32 &GLOBAL___stderr
|
||||
|
||||
;; M2-Planet pushes forward
|
||||
mov____%rbp,%rax ;argc
|
||||
add____$i8,%rax !8
|
||||
mov____(%rax),%rax
|
||||
push___%rax
|
||||
|
||||
mov____%rbp,%rax ;argv
|
||||
add____$i8,%rax !16
|
||||
push___%rax
|
||||
|
||||
mov____%rbp,%rax ;envp
|
||||
add____$i8,%rax !8
|
||||
mov____(%rax),%rax
|
||||
add____$i8,%rax !0x03
|
||||
shl____$i8,%rax !0x03
|
||||
add____%rbp,%rax
|
||||
push___%rax
|
||||
|
||||
;; mes c lib environ
|
||||
mov____%rax,0x32 &GLOBAL_environ
|
||||
|
||||
call32 %FUNCTION_main
|
||||
|
||||
mov____%rax,%rdi
|
||||
mov____$i32,%rax SYS_exit
|
||||
syscall
|
34
lib/linux/x86_64-mes-m2/crt1.c
Normal file
34
lib/linux/x86_64-mes-m2/crt1.c
Normal file
|
@ -0,0 +1,34 @@
|
|||
/* -*-comment-start: "//";comment-end:""-*-
|
||||
* GNU Mes --- Maxwell Equations of Software
|
||||
* Copyright © 2018,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
*
|
||||
* This file is part of GNU Mes.
|
||||
*
|
||||
* GNU Mes is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or (at
|
||||
* your option) any later version.
|
||||
*
|
||||
* GNU Mes is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "mes/lib-mini.h"
|
||||
|
||||
int __stdin;
|
||||
int __stdout;
|
||||
int __stderr;
|
||||
char **environ;
|
||||
int main (int argc, char **argv, char **envp);
|
||||
|
||||
/* FIXME: this is going to be called `FUNCTION__start' */
|
||||
//#int
|
||||
//#_start ()
|
||||
//#{
|
||||
//# ..
|
||||
//#}
|
137
lib/linux/x86_64-mes-m2/syscall.c
Normal file
137
lib/linux/x86_64-mes-m2/syscall.c
Normal file
|
@ -0,0 +1,137 @@
|
|||
/* -*-comment-start: "//";comment-end:""-*-
|
||||
* GNU Mes --- Maxwell Equations of Software
|
||||
* Copyright © 2016,2017,2018,2020,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
*
|
||||
* This file is part of GNU Mes.
|
||||
*
|
||||
* GNU Mes is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or (at
|
||||
* your option) any later version.
|
||||
*
|
||||
* GNU Mes is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <linux/x86_64/syscall.h>
|
||||
|
||||
long
|
||||
__sys_call (long sys_call)
|
||||
{
|
||||
asm ("mov____0x8(%rbp),%rax !-8");
|
||||
asm ("syscall");
|
||||
}
|
||||
|
||||
long
|
||||
__sys_call1 (long sys_call, long one)
|
||||
{
|
||||
asm ("mov____0x8(%rbp),%rax !-8");
|
||||
asm ("mov____0x8(%rbp),%rdi !-16");
|
||||
asm ("syscall");
|
||||
}
|
||||
|
||||
long
|
||||
__sys_call2 (long sys_call, long one, long two)
|
||||
{
|
||||
asm ("mov____0x8(%rbp),%rax !-8");
|
||||
asm ("mov____0x8(%rbp),%rdi !-16");
|
||||
asm ("mov____0x8(%rbp),%rsi !-24");
|
||||
asm ("syscall");
|
||||
}
|
||||
|
||||
long
|
||||
__sys_call3 (long sys_call, long one, long two, long three)
|
||||
{
|
||||
asm ("mov____0x8(%rbp),%rax !-8");
|
||||
asm ("mov____0x8(%rbp),%rdi !-16");
|
||||
asm ("mov____0x8(%rbp),%rsi !-24");
|
||||
asm ("mov____0x8(%rbp),%rdx !-32");
|
||||
asm ("syscall");
|
||||
}
|
||||
|
||||
long
|
||||
__sys_call4 (long sys_call, long one, long two, long three, long four)
|
||||
{
|
||||
asm ("mov____0x8(%rbp),%rax !-8");
|
||||
asm ("mov____0x8(%rbp),%rdi !-16");
|
||||
asm ("mov____0x8(%rbp),%rsi !-24");
|
||||
asm ("mov____0x8(%rbp),%rdx !-32");
|
||||
asm ("mov____0x8(%rbp),%r10 !-40");
|
||||
asm ("syscall");
|
||||
}
|
||||
|
||||
long
|
||||
_sys_call (long sys_call)
|
||||
{
|
||||
long r = __sys_call (sys_call);
|
||||
if (r < 0)
|
||||
{
|
||||
errno = -r;
|
||||
r = -1;
|
||||
}
|
||||
else
|
||||
errno = 0;
|
||||
return r;
|
||||
}
|
||||
|
||||
long
|
||||
_sys_call1 (long sys_call, long one)
|
||||
{
|
||||
long r = __sys_call1 (sys_call, one);
|
||||
if (r < 0)
|
||||
{
|
||||
errno = -r;
|
||||
r = -1;
|
||||
}
|
||||
else
|
||||
errno = 0;
|
||||
return r;
|
||||
}
|
||||
|
||||
long
|
||||
_sys_call2 (long sys_call, long one, long two)
|
||||
{
|
||||
long r = __sys_call2 (sys_call, one, two);
|
||||
if (r < 0)
|
||||
{
|
||||
errno = -r;
|
||||
r = -1;
|
||||
}
|
||||
else
|
||||
errno = 0;
|
||||
return r;
|
||||
}
|
||||
|
||||
long
|
||||
_sys_call3 (long sys_call, long one, long two, long three)
|
||||
{
|
||||
long r = __sys_call3 (sys_call, one, two, three);
|
||||
if (r < 0)
|
||||
{
|
||||
errno = -r;
|
||||
r = -1;
|
||||
}
|
||||
else
|
||||
errno = 0;
|
||||
return r;
|
||||
}
|
||||
|
||||
long
|
||||
_sys_call4 (long sys_call, long one, long two, long three, long four)
|
||||
{
|
||||
long r = __sys_call4 (sys_call, one, two, three, four);
|
||||
if (r < 0)
|
||||
{
|
||||
errno = -r;
|
||||
r = -1;
|
||||
}
|
||||
else
|
||||
errno = 0;
|
||||
return r;
|
||||
}
|
74
lib/m2/x86_64/ELF-x86_64.hex2
Normal file
74
lib/m2/x86_64/ELF-x86_64.hex2
Normal file
|
@ -0,0 +1,74 @@
|
|||
### Copyright (C) 2016 Jeremiah Orians
|
||||
### Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
|
||||
### This file is part of M2-Planet.
|
||||
###
|
||||
### M2-Planet is free software: you can redistribute it and/or modify
|
||||
### it under the terms of the GNU General Public License as published by
|
||||
### the Free Software Foundation, either version 3 of the License, or
|
||||
### (at your option) any later version.
|
||||
###
|
||||
### M2-Planet is distributed in the hope that it will be useful,
|
||||
### but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
### GNU General Public License for more details.
|
||||
###
|
||||
### You should have received a copy of the GNU General Public License
|
||||
### along with M2-Planet. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
### stage0's hex2 format
|
||||
### !<label> 1 byte relative
|
||||
### $<label> 2 byte address
|
||||
### @<label> 2 byte relative
|
||||
### &<label> 4 byte address
|
||||
### %<label> 4 byte relative
|
||||
|
||||
### if you wish to use this header, you need to add :ELF_end to the end of your
|
||||
### M1 or hex2 files.
|
||||
|
||||
## ELF Header
|
||||
|
||||
:ELF_base
|
||||
7F 45 4C 46 # e_ident[EI_MAG0-3] ELF's magic number
|
||||
|
||||
02 # e_ident[EI_CLASS] Indicating 64 bit
|
||||
01 # e_ident[EI_DATA] Indicating little endianness
|
||||
01 # e_ident[EI_VERSION] Indicating original elf
|
||||
|
||||
03 # e_ident[EI_OSABI] Set at 3 because FreeBSD is strict
|
||||
00 # e_ident[EI_ABIVERSION] See above
|
||||
|
||||
00 00 00 00 00 00 00 # e_ident[EI_PAD]
|
||||
|
||||
02 00 # e_type Indicating Executable
|
||||
3E 00 # e_machine Indicating AMD64
|
||||
01 00 00 00 # e_version Indicating original elf
|
||||
|
||||
&_start 00 00 00 00 # e_entry Address of the entry point
|
||||
%ELF_program_headers>ELF_base 00 00 00 00 # e_phoff Address of program header table
|
||||
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
|
||||
|
||||
|
||||
:ELF_program_headers
|
||||
:ELF_program_header__text
|
||||
01 00 00 00 # ph_type: PT-LOAD = 1
|
||||
07 00 00 00 # ph_flags: PF-X|PF-W|PF-R = 7
|
||||
00 00 00 00 00 00 00 00 # ph_offset
|
||||
&ELF_base 00 00 00 00 # ph_vaddr
|
||||
&ELF_base 00 00 00 00 # ph_physaddr
|
||||
%ELF_end>ELF_base 00 00 00 00 # ph_filesz
|
||||
%ELF_end>ELF_base 00 00 00 00 # ph_memsz
|
||||
01 00 00 00 00 00 00 00 # ph_align
|
||||
|
||||
:ELF_text
|
101
lib/m2/x86_64/x86_64_defs.M1
Normal file
101
lib/m2/x86_64/x86_64_defs.M1
Normal file
|
@ -0,0 +1,101 @@
|
|||
## Copyright (C) 2017 Jeremiah Orians
|
||||
## This file is part of M2-Planet.
|
||||
##
|
||||
## M2-Planet is free software: you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation, either version 3 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## M2-Planet is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with M2-Planet. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
DEFINE ADD_IMMEDIATE_to_rax 4805
|
||||
DEFINE ADD_IMMEDIATE_to_rbp 4881C5
|
||||
DEFINE ADD_rax_to_rbx 4801C3
|
||||
DEFINE ADD_rbp_to_rax 4801E8
|
||||
DEFINE ADD_rbx_to_rax 4801D8
|
||||
DEFINE AND_rax_rbx 4821D8
|
||||
DEFINE CALL_IMMEDIATE E8
|
||||
DEFINE CALL_rax FFD0
|
||||
DEFINE CMP 4839C3
|
||||
DEFINE COPY_rax_to_rcx 4889C1
|
||||
DEFINE COPY_rax_to_rdi 4889C7
|
||||
DEFINE COPY_rbx_to_rax 4889D8
|
||||
DEFINE COPY_rbp_to_rax 4889E8
|
||||
DEFINE COPY_rbx_to_rdi 4889DF
|
||||
DEFINE COPY_rdi_to_rbp 4889FD
|
||||
DEFINE COPY_rsp_to_rbp 4889E5
|
||||
DEFINE COPY_RSP_to_RDI 4889E7
|
||||
DEFINE CQTO 4899
|
||||
DEFINE DIVIDE_rax_by_rbx_into_rax 48F7F3
|
||||
DEFINE DIVIDES_rax_by_rbx_into_rax 48F7FB
|
||||
DEFINE JUMP E9
|
||||
DEFINE JUMP_EQ 0F84
|
||||
DEFINE JUMP_NE 0F85
|
||||
DEFINE LOAD_BASE_ADDRESS_rax 488D85
|
||||
DEFINE LOAD_BYTE 480FBE00
|
||||
DEFINE LOAD_BYTE_rbx 480FBE1B
|
||||
DEFINE LOAD_EFFECTIVE_ADDRESS_rax 488D8424
|
||||
DEFINE LOAD_EFFECTIVE_ADDRESS_rdi 488DBC24
|
||||
DEFINE LOAD_EFFECTIVE_ADDRESS_rdx 488D9424
|
||||
DEFINE LOAD_EFFECTIVE_ADDRESS_rsi 488DB424
|
||||
DEFINE LOAD_IMMEDIATE_r10 48C7C2
|
||||
DEFINE LOAD_IMMEDIATE_rax 48C7C0
|
||||
DEFINE LOAD_IMMEDIATE_rbx 48C7C3
|
||||
DEFINE LOAD_IMMEDIATE_rdi 48C7C7
|
||||
DEFINE LOAD_IMMEDIATE_rdx 48C7C2
|
||||
DEFINE LOAD_IMMEDIATE_rsi 48C7C6
|
||||
DEFINE LOAD_INTEGER 488B00
|
||||
DEFINE LOAD_INTEGER_rbx 488B1B
|
||||
DEFINE LOAD_INTEGER_rdi 488B3F
|
||||
DEFINE LOAD_INTEGER_rdx 488B12
|
||||
DEFINE LOAD_INTEGER_rsi 488B36
|
||||
DEFINE LOAD_RSP_IMMEDIATE_into_rax 488B8424
|
||||
DEFINE MODULUS_rax_from_rbx_into_rbx 48F7F3
|
||||
DEFINE MODULUSS_rax_from_rbx_into_rbx 48F7FB
|
||||
DEFINE MOVE_rbx_to_rax 4889D8
|
||||
DEFINE MOVE_rdx_to_rax 4889D0
|
||||
DEFINE MOVEZX 480FB6C0
|
||||
DEFINE MOVESX 4863C0
|
||||
DEFINE MULTIPLY_rax_by_rbx_into_rax 48F7EB
|
||||
DEFINE MULTIPLYS_rax_by_rbx_into_rax 48F7E3
|
||||
DEFINE NULL 0000000000000000
|
||||
DEFINE NOT_rax 48F7D0
|
||||
DEFINE OR_rax_rbx 4809D8
|
||||
DEFINE POP_RAX 58
|
||||
DEFINE POP_RBP 5D
|
||||
DEFINE POP_RBX 5B
|
||||
DEFINE POP_RDI 5F
|
||||
DEFINE PUSH_RAX 50
|
||||
DEFINE PUSH_RBP 55
|
||||
DEFINE PUSH_RBX 53
|
||||
DEFINE PUSH_RDI 57
|
||||
DEFINE RETURN C3
|
||||
DEFINE SAL_rax_Immediate8 48C1E0
|
||||
DEFINE SHL_rax_cl 48D3E0
|
||||
DEFINE SAL_rax_cl 48D3F0
|
||||
DEFINE SHR_rax_cl 48D3E8
|
||||
DEFINE SAR_rax_cl 48D3F8
|
||||
DEFINE SETA 0F97C0
|
||||
DEFINE SETAE 0F93C0
|
||||
DEFINE SETB 0F92C0
|
||||
DEFINE SETBE 0F96C0
|
||||
DEFINE SETE 0F94C0
|
||||
DEFINE SETG 0F9FC0
|
||||
DEFINE SETGE 0F9DC0
|
||||
DEFINE SETL 0F9CC0
|
||||
DEFINE SETLE 0F9EC0
|
||||
DEFINE SETNE 0F95C0
|
||||
DEFINE STORE_CHAR 8803
|
||||
DEFINE STORE_INTEGER 488903
|
||||
DEFINE SUBTRACT_rax_from_rbx_into_rbx 4829C3
|
||||
DEFINE SYSCALL 0F05
|
||||
DEFINE TEST 4885C0
|
||||
DEFINE XCHG_rax_rbx 4893
|
||||
DEFINE XOR_rbx_rax_into_rax 4831D8
|
|
@ -28,6 +28,7 @@ DEFINE add____$i32,%rdi 4881c7
|
|||
DEFINE add____$i32,(%rax) 8100
|
||||
DEFINE add____$i32,0x32(%rbp) 8185
|
||||
DEFINE add____$i8,%rax 4883c0
|
||||
DEFINE add____$i8,%rbp 4883c5
|
||||
DEFINE add____$i8,%rdi 4883c7
|
||||
DEFINE add____$i8,%rsp 4883c4
|
||||
DEFINE add____$i8,(%rax) 8300
|
||||
|
@ -115,6 +116,7 @@ DEFINE mov____%rbp,%rsp 4889ec
|
|||
DEFINE mov____%rbp,0x8(%rbp) 48896d
|
||||
DEFINE mov____%rdi,%r8 4989f8
|
||||
DEFINE mov____%rdi,%rax 4889f8
|
||||
DEFINE mov____%rdi,%rbp 4889fd
|
||||
DEFINE mov____%rdi,%rcx 4889f9
|
||||
DEFINE mov____%rdi,%rdi 4889ff
|
||||
DEFINE mov____%rdi,0x32 48893c25
|
||||
|
|
|
@ -20,12 +20,15 @@
|
|||
# kaem --verbose --strict --file scaffold/argv.kaem
|
||||
# scaffold/argv-m2
|
||||
|
||||
cc_cpu=${cc_cpu:-i386}
|
||||
mes_cpu=${mes_cpu:-x86}
|
||||
stage0_cpu=${stage0_cpu:-x86}
|
||||
|
||||
M2-Planet \
|
||||
--debug \
|
||||
--architecture ${stage0_cpu} \
|
||||
-D __${cc_cpu}__=1 \
|
||||
-D __linux__=1 \
|
||||
-f include/mes/lib-mini.h \
|
||||
-f lib/linux/${mes_cpu}-mes-m2/crt1.c \
|
||||
-f lib/linux/${mes_cpu}-mes-m2/_exit.c \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#! /bin/sh
|
||||
# Copyright © 2019,2021,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
# Copyright © 2019,2021,2022,2023 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
#
|
||||
# This file is part of GNU Mes.
|
||||
#
|
||||
|
@ -20,6 +20,7 @@
|
|||
# kaem --verbose --strict --file scaffold/global-array.kaem
|
||||
# scaffold/global-array
|
||||
|
||||
cc_cpu=${cc_cpu:-i386}
|
||||
mes_cpu=${mes_cpu:-x86}
|
||||
stage0_cpu=${stage0_cpu:-x86}
|
||||
|
||||
|
@ -27,6 +28,9 @@ M2-Planet \
|
|||
--bootstrap-mode \
|
||||
--debug \
|
||||
--architecture ${stage0_cpu} \
|
||||
-D __${cc_cpu}__=1 \
|
||||
-D __linux__=1 \
|
||||
-f lib/linux/${mes_cpu}-mes-m2/crt1.c \
|
||||
-f lib/mes/globals.c \
|
||||
-f lib/linux/${mes_cpu}-mes-m2/_exit.c \
|
||||
-f lib/linux/${mes_cpu}-mes-m2/_write.c \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#! /bin/sh
|
||||
# Copyright © 2019,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
# Copyright © 2019,2022,2023 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
#
|
||||
# This file is part of GNU Mes.
|
||||
#
|
||||
|
@ -20,12 +20,15 @@
|
|||
# kaem --verbose --strict --file scaffold/hello.kaem
|
||||
# scaffold/hello-m2
|
||||
|
||||
cc_cpu=${cc_cpu:-i386}
|
||||
mes_cpu=${mes_cpu:-x86}
|
||||
stage0_cpu=${stage0_cpu:-x86}
|
||||
|
||||
M2-Planet \
|
||||
--debug \
|
||||
--architecture ${stage0_cpu} \
|
||||
-D __${cc_cpu}__=1 \
|
||||
-D __linux__=1 \
|
||||
-f include/mes/lib-mini.h \
|
||||
-f lib/linux/${mes_cpu}-mes-m2/crt1.c \
|
||||
-f lib/linux/${mes_cpu}-mes-m2/_exit.c \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#! /bin/sh
|
||||
# Copyright © 2019,2021,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
# Copyright © 2019,2021,2022,2023 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
#
|
||||
# This file is part of GNU Mes.
|
||||
#
|
||||
|
@ -20,6 +20,7 @@
|
|||
# kaem --verbose --strict --file scaffold/local-array.kaem
|
||||
# scaffold/local-array
|
||||
|
||||
cc_cpu=${cc_cpu:-i386}
|
||||
mes_cpu=${mes_cpu:-x86}
|
||||
stage0_cpu=${stage0_cpu:-x86}
|
||||
|
||||
|
@ -27,6 +28,9 @@ M2-Planet \
|
|||
--bootstrap-mode \
|
||||
--debug \
|
||||
--architecture ${stage0_cpu} \
|
||||
-D __${cc_cpu}__=1 \
|
||||
-D __linux__=1 \
|
||||
-f lib/linux/${mes_cpu}-mes-m2/crt1.c \
|
||||
-f lib/mes/globals.c \
|
||||
-f lib/linux/${mes_cpu}-mes-m2/_exit.c \
|
||||
-f lib/linux/${mes_cpu}-mes-m2/_write.c \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#! /bin/sh
|
||||
# Copyright © 2019,2021,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
# Copyright © 2019,2021,2022,2023 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
#
|
||||
# This file is part of GNU Mes.
|
||||
#
|
||||
|
@ -20,6 +20,7 @@
|
|||
# kaem --verbose --strict --file scaffold/local-static-array.kaem
|
||||
# scaffold/local-static-array
|
||||
|
||||
cc_cpu=${cc_cpu:-i386}
|
||||
mes_cpu=${mes_cpu:-x86}
|
||||
stage0_cpu=${stage0_cpu:-x86}
|
||||
|
||||
|
@ -27,6 +28,9 @@ M2-Planet \
|
|||
--bootstrap-mode \
|
||||
--debug \
|
||||
--architecture ${stage0_cpu} \
|
||||
-f lib/linux/${mes_cpu}-mes-m2/crt1.c \
|
||||
-D __${cc_cpu}__=1 \
|
||||
-D __linux__=1 \
|
||||
-f lib/mes/globals.c \
|
||||
-f lib/linux/${mes_cpu}-mes-m2/_exit.c \
|
||||
-f lib/linux/${mes_cpu}-mes-m2/_write.c \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#! /bin/sh
|
||||
# Copyright © 2019,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
# Copyright © 2019,2022,2023 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
#
|
||||
# This file is part of GNU Mes.
|
||||
#
|
||||
|
@ -20,12 +20,15 @@
|
|||
# kaem --verbose --strict --file scaffold/main.kaem
|
||||
# scaffold/main-m2
|
||||
|
||||
cc_cpu=${cc_cpu:-i386}
|
||||
mes_cpu=${mes_cpu:-x86}
|
||||
stage0_cpu=${stage0_cpu:-x86}
|
||||
|
||||
M2-Planet \
|
||||
--debug \
|
||||
--architecture ${stage0_cpu} \
|
||||
-D __${cc_cpu}__=1 \
|
||||
-D __linux__=1 \
|
||||
-f lib/linux/${mes_cpu}-mes-m2/crt1.c \
|
||||
-f scaffold/main.c \
|
||||
-o scaffold/main.M1
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#! /bin/sh
|
||||
# Copyright © 2019,2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
# Copyright © 2019,2022,2023 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
#
|
||||
# This file is part of GNU Mes.
|
||||
#
|
||||
|
@ -20,12 +20,15 @@
|
|||
# kaem --verbose --strict --file scaffold/read.kaem
|
||||
# scaffold/read-m2
|
||||
|
||||
cc_cpu=${cc_cpu:-i386}
|
||||
mes_cpu=${mes_cpu:-x86}
|
||||
stage0_cpu=${stage0_cpu:-x86}
|
||||
|
||||
M2-Planet \
|
||||
--debug \
|
||||
--architecture ${stage0_cpu} \
|
||||
-D __${cc_cpu}__=1 \
|
||||
-D __linux__=1 \
|
||||
-f lib/linux/${mes_cpu}-mes-m2/crt1.c \
|
||||
-f include/mes/lib-mini.h \
|
||||
-f lib/linux/${mes_cpu}-mes-m2/_write.c \
|
||||
|
|
11
src/posix.c
11
src/posix.c
|
@ -373,15 +373,16 @@ waitpid_ (struct scm *pid, struct scm *options)
|
|||
return cons (make_number (child), make_number (status));
|
||||
}
|
||||
|
||||
#if __M2__
|
||||
/* Milliseconds for everyone else. */
|
||||
#define TIME_UNITS_PER_SECOND 1000
|
||||
#elif __x86_64__
|
||||
#if __x86_64__
|
||||
/* Nanoseconds on 64-bit systems with POSIX timers. */
|
||||
#if __M2__
|
||||
#define TIME_UNITS_PER_SECOND 1000000000
|
||||
#else
|
||||
#define TIME_UNITS_PER_SECOND 1000000000U
|
||||
#endif
|
||||
#else
|
||||
/* Milliseconds for everyone else. */
|
||||
#define TIME_UNITS_PER_SECOND 1000U
|
||||
#define TIME_UNITS_PER_SECOND 1000
|
||||
#endif
|
||||
|
||||
struct scm *
|
||||
|
|
Loading…
Reference in a new issue