x86_64: lib: Use __init_io.

* lib/linux/x86_64-mes-gcc/crt1.c (_start): Replace manual initialization
of __stdin, __stdout, __stderr, and environ with __init_io ().
* lib/linux/x86_64-mes-m2/crt1.M1 (_start): Likewise.
* lib/linux/x86_64-mes-mescc/crt1.c (_start): Likewise.
This commit is contained in:
Janneke Nieuwenhuizen 2023-05-03 20:59:12 +02:00
parent 1e898ea312
commit 88eb90dd38
4 changed files with 15 additions and 57 deletions

View file

@ -24,7 +24,7 @@
// let's try _main first
#include <mes/lib-mini.h>
int main (int argc, char *argv[]);
int main (int argc, char *argv[], char *envp[]);
// gcc x86_64 calling convention:
// rdi, rsi, rdx, rcx, r8, r9, <stack0>, <stack1>

View file

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* GNU Mes --- Maxwell Equations of Software
* Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
* Copyright © 2017,2018,2023 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
*
* This file is part of GNU Mes.
*
@ -19,7 +19,7 @@
*/
#include <mes/lib-mini.h>
// int main (int argc, char *argv[]);
int main (int argc, char *argv[], char *envp[]);
// gcc x86_64 calling convention:
// rdi, rsi, rdx, rcx, r8, r9, <stack0>, <stack1>
@ -29,38 +29,14 @@ void
_start ()
{
asm (
"mov $0,%%eax\n\t"
"mov %%eax,%0\n"
: "=r" (__stdin)
: //no inputs ""
);
"mov %rbp,%rax\n\t"
"add $8,%rax\n\t"
"mov (%rax),%rax\n\t"
"add $3,%rax\n\t"
"shl $3,%rax\n\t"
"add %rbp,%rax\n\t"
"mov %rax,%rdx\n\t"
asm (
"mov $1,%%eax\n\t"
"mov %%eax,%0\n"
: "=r" (__stdout)
: //no inputs ""
);
asm (
"mov $2,%%eax\n\t"
"mov %%eax,%0\n"
: "=r" (__stderr)
: //no inputs ""
);
asm (
"mov %%rbp,%%rax\n\t"
"add $8,%%rax\n\t"
"mov (%%rax),%%rax\n\t"
"add $3,%%rax\n\t"
"shl $3,%%rax\n\t"
"add %%rbp,%%rax\n\t"
"mov %%rax,%0\n\t"
"mov %%rax,%%rdx\n\t"
: "=r" (environ)
: //no inputs ""
);
asm (
"mov %rbp,%rax\n\t"
"add $16,%rax\n\t"
"mov %rax,%rsi\n\t"
@ -69,6 +45,8 @@ _start ()
"add $8,%rax\n\t"
"mov (%rax),%rax\n\t"
"mov %rax,%rdi\n\t"
"call __init_io\n\t"
"call main\n\t"
"mov %rax,%rdi\n\t"

View file

@ -20,14 +20,6 @@
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
@ -46,9 +38,7 @@
add____%rbp,%rax
push___%rax
;; mes c lib environ
mov____%rax,0x32 &GLOBAL_environ
call32 %FUNCTION___init_io
call32 %FUNCTION_main
mov____%rax,%rdi

View file

@ -1,6 +1,6 @@
/* -*-comment-start: "//";comment-end:""-*-
* 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.
*
@ -24,15 +24,6 @@ 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
@ -45,8 +36,6 @@ _start ()
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
@ -70,6 +59,7 @@ _start ()
asm ("push___%rax"); // bootstrap
#endif
__init_io ();
main ();
asm ("mov____%rax,%rdi");