1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
9 //static Lock debuglock;
11 static void go_vprintf(const char*, va_list);
13 // write to goroutine-local buffer if diverting output,
14 // or else standard error.
16 gwrite(const void *v, int32 n)
20 if(g == nil || g->writebuf == nil) {
21 // Avoid -D_FORTIFY_SOURCE problems.
22 int rv __attribute__((unused));
24 rv = runtime_write(2, v, n);
33 runtime_memmove(g->writebuf, v, n);
39 runtime_dump(byte *p, int32 n)
44 runtime_printpointer((byte*)(uintptr)(p[i]>>4));
45 runtime_printpointer((byte*)(uintptr)(p[i]&0xf));
56 runtime_prints(const char *s)
58 gwrite(s, runtime_findnull((const byte*)s));
62 runtime_printf(const char *s, ...)
71 // Very simple printf. Only for debugging prints.
72 // Do not add to this without checking with Rob.
74 go_vprintf(const char *s, va_list va)
78 //runtime_lock(&debuglock);
89 runtime_printslice(va_arg(va, Slice));
92 runtime_printbyte(va_arg(va, int32));
95 runtime_printint(va_arg(va, int32));
98 runtime_printint(va_arg(va, int64));
101 runtime_printeface(va_arg(va, Eface));
104 runtime_printfloat(va_arg(va, float64));
107 runtime_printcomplex(va_arg(va, __complex double));
110 runtime_printiface(va_arg(va, Iface));
113 runtime_printpointer(va_arg(va, void*));
116 runtime_prints(va_arg(va, char*));
119 runtime_printstring(va_arg(va, String));
122 runtime_printbool(va_arg(va, int));
125 runtime_printuint(va_arg(va, uint64));
128 runtime_printhex(va_arg(va, uint32));
131 runtime_printhex(va_arg(va, uint64));
139 //runtime_unlock(&debuglock);
143 runtime_printpc(void *p __attribute__ ((unused)))
145 runtime_prints("PC=");
146 runtime_printhex((uint64)(uintptr)runtime_getcallerpc(p));
150 runtime_printbool(_Bool v)
160 runtime_printbyte(int8 c)
166 runtime_printfloat(double v)
176 i = __builtin_isinf_sign(v);
186 n = 7; // digits printed
218 // format +d.dddd+edd
238 buf[n+4] = (e/100) + '0';
239 buf[n+5] = (e/10)%10 + '0';
240 buf[n+6] = (e%10) + '0';
245 runtime_printcomplex(__complex double v)
248 runtime_printfloat(__builtin_creal(v));
249 runtime_printfloat(__builtin_cimag(v));
254 runtime_printuint(uint64 v)
259 for(i=nelem(buf)-1; i>0; i--) {
265 gwrite(buf+i, nelem(buf)-i);
269 runtime_printint(int64 v)
275 runtime_printuint(v);
279 runtime_printhex(uint64 v)
281 static const char *dig = "0123456789abcdef";
287 buf[--i] = dig[v%16];
292 gwrite(buf+i, nelem(buf)-i);
296 runtime_printpointer(void *p)
298 runtime_printhex((uint64)(uintptr)p);
302 runtime_printstring(String v)
304 // extern uint32 runtime_maxstring;
306 // if(v.len > runtime_maxstring) {
307 // gwrite("[string too long]", 17);
311 gwrite(v.str, v.len);
315 __go_print_space(void)