1*9a747e4fSDavid du Colombier #include <u.h> 2*9a747e4fSDavid du Colombier #include <libc.h> 3*9a747e4fSDavid du Colombier #include <thread.h> 4*9a747e4fSDavid du Colombier #include "threadimpl.h" 5*9a747e4fSDavid du Colombier 6*9a747e4fSDavid du Colombier static long totalmalloc; 7*9a747e4fSDavid du Colombier 8*9a747e4fSDavid du Colombier void* 9*9a747e4fSDavid du Colombier _threadmalloc(long size, int z) 10*9a747e4fSDavid du Colombier { 11*9a747e4fSDavid du Colombier void *m; 12*9a747e4fSDavid du Colombier 13*9a747e4fSDavid du Colombier m = malloc(size); 14*9a747e4fSDavid du Colombier if (m == nil) 15*9a747e4fSDavid du Colombier sysfatal("Malloc of size %ld failed: %r\n", size); 16*9a747e4fSDavid du Colombier setmalloctag(m, getcallerpc(&size)); 17*9a747e4fSDavid du Colombier totalmalloc += size; 18*9a747e4fSDavid du Colombier if (size > 1000000) { 19*9a747e4fSDavid du Colombier fprint(2, "Malloc of size %ld, total %ld\n", size, totalmalloc); 20*9a747e4fSDavid du Colombier abort(); 21*9a747e4fSDavid du Colombier } 22*9a747e4fSDavid du Colombier if (z) 23*9a747e4fSDavid du Colombier memset(m, 0, size); 24*9a747e4fSDavid du Colombier return m; 25*9a747e4fSDavid du Colombier } 26*9a747e4fSDavid du Colombier 27*9a747e4fSDavid du Colombier void 28*9a747e4fSDavid du Colombier _threadsysfatal(char *fmt, va_list arg) 29*9a747e4fSDavid du Colombier { 30*9a747e4fSDavid du Colombier char buf[1024]; /* size doesn't matter; we're about to exit */ 31*9a747e4fSDavid du Colombier 32*9a747e4fSDavid du Colombier vseprint(buf, buf+sizeof(buf), fmt, arg); 33*9a747e4fSDavid du Colombier if(argv0) 34*9a747e4fSDavid du Colombier fprint(2, "%s: %s\n", argv0, buf); 35*9a747e4fSDavid du Colombier else 36*9a747e4fSDavid du Colombier fprint(2, "%s\n", buf); 37*9a747e4fSDavid du Colombier threadexitsall(buf); 38*9a747e4fSDavid du Colombier } 39