core: Implement stack and frame.
[mes.git] / lib / libg.c
1 /* -*-comment-start: "//";comment-end:""-*-
2  * GNU Mes --- Maxwell Equations of Software
3  * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
4  *
5  * This file is part of GNU Mes.
6  *
7  * GNU Mes is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3 of the License, or (at
10  * your option) any later version.
11  *
12  * GNU Mes is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 // gcc/xgcc wants -lg with all these
22 // what's the story here?
23
24 #include <sys/time.h>
25
26 #define exit __exit
27 #define fprintf _fprintf
28 #define longjmp _longjmp
29 #define malloc _malloc
30 #define printf _printf
31 #define putchar _putchar
32 #define puts _puts
33 #define setjmp _setjmp
34 #define signal _signal
35 #define strcmp _strcmp
36 #define sprintf _sprintf
37 #define sscanf _sscanf
38
39 #include <libc+tcc.c>
40
41 #if __GNU__
42 #include <linux/gnu.c>
43 #elif __linux__
44 #include <linux/gnu.c>
45 #else
46 #error both __GNU__ and _linux__ are undefined, choose one
47 #endif
48
49 // m4
50 #include <stdlib/abort.c>
51 #include <stub/atof.c>
52 #include <string/bcmp.c>
53 #include <string/bcopy.c>
54 #include <string/bzero.c>
55 #include <stdio/fileno.c>
56 #include <stub/fpurge.c>
57 #include <stub/freadahead.c>
58 #include <string/index.c>
59 #include <ctype/isalnum.c>
60 #include <ctype/isalpha.c>
61 #include <ctype/iscntrl.c>
62 #include <ctype/isprint.c>
63 #include <ctype/ispunct.c>
64 #include <posix/mktemp.c>
65 #include <stub/pclose.c>
66 #include <stub/popen.c>
67 #include <string/rindex.c>
68 #include <stub/rewind.c>
69 #include <stub/setbuf.c>
70 #include <stub/system.c>
71 #include <string/strerror.c>
72
73 // binutils
74 #include <stdlib/abs.c>
75 #include <stub/chown.c>
76 #include <stub/ctime.c>
77 #include <stdio/fdgets.c>
78 #include <stdio/feof.c>
79 #include <stdio/fgets.c>
80 #include <stub/frexp.c>
81 #include <stdio/perror.c>
82 #include <stub/sigsetmask.c>
83 #include <string/strcspn.c>
84 #include <string/strncat.c>
85 #include <string/strpbrk.c>
86 #include <string/strspn.c>
87 #include <stub/sys_siglist.c>
88 #include <stub/umask.c>
89 #include <stub/utime.c>
90 #include <stub/fscanf.c>
91 #include <ctype/isascii.c>
92 #include <stdlib/bsearch.c>
93 #include <stub/gmtime.c>
94 #include <posix/sbrk.c>
95 #include <string/strdup.c>
96 #include <posix/raise.c>
97 #include <stub/strftime.c>
98 #include <stdlib/mbstowcs.c>
99 #include <stdio/clearerr.c>
100 #include <math/fabs.c>
101
102 // gcc
103
104 #include <stdio/freopen.c>
105 #include <stub/times.c>
106 #include <posix/sleep.c>
107 #include <posix/unsetenv.c>
108 #include <stdlib/atexit.c>
109 #include <posix/alarm.c>
110 #include <stub/getpwnam.c>
111
112 #if !__GNU__
113 #include <stdlib/alloca.c>
114 #endif
115
116 //#include <stdlib/__exit.c>
117 #include <stub/__cleanup.c>
118
119 int
120 __libc_subinit ()
121 {
122   static int stub = 0;
123   if (__mes_debug () && !stub)
124     eputs ("__libc_subinit stub\n");
125   stub = 1;
126   return 0;
127 }
128
129 int
130 __syscall_error ()
131 {
132   static int stub = 0;
133   if (__mes_debug () && !stub)
134     eputs ("__syscall_error stub\n");
135   stub = 1;
136   return 0;
137 }
138
139 int
140 __fpu_control ()
141 {
142   static int stub = 0;
143   if (__mes_debug () && !stub)
144     eputs ("__fpu_control stub\n");
145   stub = 1;
146   return 0;
147 }