mescc: Support less-patched tcc/gcc: Add crti and crtn.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 10 Jun 2018 14:03:18 +0000 (16:03 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 10 Jun 2018 14:03:18 +0000 (16:03 +0200)
* lib/crt0.c[__MESC__]: Support MesCC.
* lib/crti.c: New file.
* lib/crtn.c: New file.
* build-aux/build-mes-gcc.sh: Build them.

build-aux/build-mes-gcc.sh
build-aux/build-mes.sh
lib/crt0.c
lib/crti.c [new file with mode: 0644]
lib/crtn.c [new file with mode: 0644]

index 2dca41f1f5e6e18c79da2e460940e27ab387c1fc..58c24cb759410c09e50cad3918d1955933eeb605 100755 (executable)
@@ -64,6 +64,8 @@ C32FLAGS=${C32FLAGS-"
 
 ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes-gcc.sh lib/crt0
 ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes-gcc.sh lib/crt1
+ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes-gcc.sh lib/crti
+ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes-gcc.sh lib/crtn
 ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes-gcc.sh lib/libc-mini
 ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes-gcc.sh lib/libc
 ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes-gcc.sh lib/libgetopt
index 02d47ba78788781f2b046c7d873085a4045733e2..a7ca9ab57dabf09b63ab57dcc312081e85bf9939 100755 (executable)
@@ -97,7 +97,10 @@ if [ -d "$MES_SEED" ]; then
 fi
 
 PREPROCESS=1
+ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/crt0
 ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/crt1
+ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/crti
+ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/crtn
 ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/libc-mini
 ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/libc
 ARCHDIR=1 NOLINK=1 sh build-aux/cc-mes.sh lib/libgetopt
index 08cbbc803b798e8c4903bef9907c98e60bf61db5..5a34f358599698d1882aa7a4337bd159ad802124 100644 (file)
@@ -26,6 +26,8 @@
 char **environ = 0;
 int _main (int argc, char *argv[]);
 
+#if __GNUC__
+
 void
 _start ()
 {
@@ -59,3 +61,37 @@ _start ()
        :
        );
 }
+
+#elif __MESC__
+
+int
+_start ()
+{
+  asm ("mov____%ebp,%eax");
+  asm ("add____$i8,%eax !4");
+
+  asm ("movzbl_(%eax),%eax");
+  asm ("add____$i8,%eax !3");
+
+  asm ("shl____$i8,%eax !0x02");
+  asm ("add____%ebp,%eax");
+  asm ("mov____%eax,0x32 &environ");
+
+  asm ("mov____%ebp,%eax");
+  asm ("add____$i8,%eax !8");
+  asm ("push___%eax");
+
+  asm ("mov____%ebp,%eax");
+  asm ("add____$i8,%eax !4");
+  asm ("movzbl_(%eax),%eax");
+  asm ("push___%eax");
+
+  _main ();
+
+  asm ("mov____%eax,%ebx");
+  asm ("mov____$i32,%eax %1");
+  asm ("int____$0x80");
+  asm ("hlt");
+}
+
+#endif
diff --git a/lib/crti.c b/lib/crti.c
new file mode 100644 (file)
index 0000000..1038f49
--- /dev/null
@@ -0,0 +1,19 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
diff --git a/lib/crtn.c b/lib/crtn.c
new file mode 100644 (file)
index 0000000..1038f49
--- /dev/null
@@ -0,0 +1,19 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */