19a747e4fSDavid du Colombier #include <u.h>
29a747e4fSDavid du Colombier #include <libc.h>
39a747e4fSDavid du Colombier #include <thread.h>
49a747e4fSDavid du Colombier #include "threadimpl.h"
59a747e4fSDavid du Colombier
69a747e4fSDavid du Colombier static long totalmalloc;
79a747e4fSDavid du Colombier
89a747e4fSDavid du Colombier void*
_threadmalloc(long size,int z)99a747e4fSDavid du Colombier _threadmalloc(long size, int z)
109a747e4fSDavid du Colombier {
119a747e4fSDavid du Colombier void *m;
129a747e4fSDavid du Colombier
139a747e4fSDavid du Colombier m = malloc(size);
149a747e4fSDavid du Colombier if (m == nil)
15*14cc0f53SDavid du Colombier sysfatal("Malloc of size %ld failed: %r", size);
169a747e4fSDavid du Colombier setmalloctag(m, getcallerpc(&size));
179a747e4fSDavid du Colombier totalmalloc += size;
187366567fSDavid du Colombier if (size > 100000000) {
199a747e4fSDavid du Colombier fprint(2, "Malloc of size %ld, total %ld\n", size, totalmalloc);
209a747e4fSDavid du Colombier abort();
219a747e4fSDavid du Colombier }
229a747e4fSDavid du Colombier if (z)
239a747e4fSDavid du Colombier memset(m, 0, size);
249a747e4fSDavid du Colombier return m;
259a747e4fSDavid du Colombier }
269a747e4fSDavid du Colombier
279a747e4fSDavid du Colombier void
_threadsysfatal(char * fmt,va_list arg)289a747e4fSDavid du Colombier _threadsysfatal(char *fmt, va_list arg)
299a747e4fSDavid du Colombier {
309a747e4fSDavid du Colombier char buf[1024]; /* size doesn't matter; we're about to exit */
319a747e4fSDavid du Colombier
329a747e4fSDavid du Colombier vseprint(buf, buf+sizeof(buf), fmt, arg);
339a747e4fSDavid du Colombier if(argv0)
349a747e4fSDavid du Colombier fprint(2, "%s: %s\n", argv0, buf);
359a747e4fSDavid du Colombier else
369a747e4fSDavid du Colombier fprint(2, "%s\n", buf);
379a747e4fSDavid du Colombier threadexitsall(buf);
389a747e4fSDavid du Colombier }
39