* libgo patch committed: Copy runtime_printf from other library
@ 2012-05-24 20:45 Ian Lance Taylor
[not found] ` <4FE67012.2000703@chamberlain.net.au>
0 siblings, 1 reply; 2+ messages in thread
From: Ian Lance Taylor @ 2012-05-24 20:45 UTC (permalink / raw)
To: gcc-patches, gofrontend-dev
[-- Attachment #1: Type: text/plain, Size: 543 bytes --]
This patch to libgo copies the implementation of runtime_printf from the
other Go library, and use that instead of calling the C library printf
function. This removes some unnecessary differences in shared files,
and removes some unnecessary stack splits. However, the main reason I'm
doing it is to pick up the support for sending the printf output into a
goroutine-specific buffer, used to implement runtime.Stack, coming up
next. Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu.
Committed to mainline and 4.7 branch.
Ian
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: patch --]
[-- Type: text/x-diff, Size: 589 bytes --]
diff -r d99f020243e7 libgo/runtime/go-callers.c
--- a/libgo/runtime/go-callers.c Tue May 22 09:54:14 2012 -0700
+++ b/libgo/runtime/go-callers.c Tue May 22 14:50:06 2012 -0700
@@ -72,5 +72,8 @@
int
Callers (int skip, struct __go_open_array pc)
{
- return runtime_callers (skip, (uintptr *) pc.__values, pc.__count);
+ /* In the Go 1 release runtime.Callers has an off-by-one error,
+ which we can not correct because it would break backward
+ compatibility. Adjust SKIP here to be compatible. */
+ return runtime_callers (skip - 1, (uintptr *) pc.__values, pc.__count);
}
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: libgo patch committed: Copy runtime_printf from other library
[not found] ` <4FE67012.2000703@chamberlain.net.au>
@ 2012-06-24 6:59 ` Ian Lance Taylor
0 siblings, 0 replies; 2+ messages in thread
From: Ian Lance Taylor @ 2012-06-24 6:59 UTC (permalink / raw)
To: michael; +Cc: gcc-patches
[-- Attachment #1: Type: text/plain, Size: 393 bytes --]
michael@chamberlain.net.au writes:
> On 25/05/2012 6:45 AM, Ian Lance Taylor wrote:
>> This patch to libgo copies the implementation of runtime_printf ...
>
> The actual patch attached to the message was the one you had earlier
> posted for the Go 1 release compatibility with the off-by-1 error in
> runtime.Callers, rather than the described patch.
Sorry, here is the correct patch.
Ian
[-- Attachment #2: patch --]
[-- Type: text/x-diff, Size: 19858 bytes --]
Index: libgo/runtime/msize.c
===================================================================
--- libgo/runtime/msize.c (revision 187847)
+++ libgo/runtime/msize.c (revision 187848)
@@ -103,7 +103,7 @@ runtime_InitSizes(void)
sizeclass++;
}
if(sizeclass != NumSizeClasses) {
- // runtime_printf("sizeclass=%d NumSizeClasses=%d\n", sizeclass, NumSizeClasses);
+ runtime_printf("sizeclass=%d NumSizeClasses=%d\n", sizeclass, NumSizeClasses);
runtime_throw("InitSizes - bad NumSizeClasses");
}
@@ -122,13 +122,13 @@ runtime_InitSizes(void)
for(n=0; n < MaxSmallSize; n++) {
sizeclass = runtime_SizeToClass(n);
if(sizeclass < 1 || sizeclass >= NumSizeClasses || runtime_class_to_size[sizeclass] < n) {
- // runtime_printf("size=%d sizeclass=%d runtime_class_to_size=%d\n", n, sizeclass, runtime_class_to_size[sizeclass]);
- // runtime_printf("incorrect SizeToClass");
+ runtime_printf("size=%d sizeclass=%d runtime_class_to_size=%d\n", n, sizeclass, runtime_class_to_size[sizeclass]);
+ runtime_printf("incorrect SizeToClass");
goto dump;
}
if(sizeclass > 1 && runtime_class_to_size[sizeclass-1] >= n) {
- // runtime_printf("size=%d sizeclass=%d runtime_class_to_size=%d\n", n, sizeclass, runtime_class_to_size[sizeclass]);
- // runtime_printf("SizeToClass too big");
+ runtime_printf("size=%d sizeclass=%d runtime_class_to_size=%d\n", n, sizeclass, runtime_class_to_size[sizeclass]);
+ runtime_printf("SizeToClass too big");
goto dump;
}
}
Index: libgo/runtime/thread-linux.c
===================================================================
--- libgo/runtime/thread-linux.c (revision 187847)
+++ libgo/runtime/thread-linux.c (revision 187848)
@@ -68,7 +68,7 @@ runtime_futexwakeup(uint32 *addr, uint32
// I don't know that futex wakeup can return
// EAGAIN or EINTR, but if it does, it would be
// safe to loop and call futex again.
- runtime_printf("futexwakeup addr=%p returned %lld\n", addr, (long long)ret);
+ runtime_printf("futexwakeup addr=%p returned %D\n", addr, ret);
*(int32*)0x1006 = 0x1006;
}
Index: libgo/runtime/chan.c
===================================================================
--- libgo/runtime/chan.c (revision 187847)
+++ libgo/runtime/chan.c (revision 187848)
@@ -100,8 +100,8 @@ runtime_makechan_c(ChanType *t, int64 hi
c->dataqsiz = hint;
if(debug)
- runtime_printf("makechan: chan=%p; elemsize=%lld; elemalign=%d; dataqsiz=%d\n",
- c, (long long)elem->__size, elem->__align, c->dataqsiz);
+ runtime_printf("makechan: chan=%p; elemsize=%D; elemalign=%d; dataqsiz=%d\n",
+ c, (int64)elem->__size, elem->__align, c->dataqsiz);
return c;
}
Index: libgo/runtime/malloc.goc
===================================================================
--- libgo/runtime/malloc.goc (revision 187847)
+++ libgo/runtime/malloc.goc (revision 187848)
@@ -139,7 +139,7 @@ __go_free(void *v)
m->mallocing = 1;
if(!runtime_mlookup(v, nil, nil, &s)) {
- // runtime_printf("free %p: not an allocated block\n", v);
+ runtime_printf("free %p: not an allocated block\n", v);
runtime_throw("free runtime_mlookup");
}
prof = runtime_blockspecial(v);
@@ -367,7 +367,7 @@ runtime_mallocinit(void)
if(p == nil)
runtime_throw("runtime: cannot reserve arena virtual address space");
if((uintptr)p & (((uintptr)1<<PageShift)-1))
- runtime_printf("runtime: SysReserve returned unaligned address %p; asked for %p", p, (void*)(bitmap_size+arena_size));
+ runtime_printf("runtime: SysReserve returned unaligned address %p; asked for %p", p, bitmap_size+arena_size);
}
if((uintptr)p & (((uintptr)1<<PageShift)-1))
runtime_throw("runtime: SysReserve returned unaligned address");
@@ -467,15 +467,15 @@ func SetFinalizer(obj Eface, finalizer E
const FuncType *ft;
if(obj.__type_descriptor == nil) {
- // runtime·printf("runtime.SetFinalizer: first argument is nil interface\n");
+ runtime_printf("runtime.SetFinalizer: first argument is nil interface\n");
goto throw;
}
if(obj.__type_descriptor->__code != GO_PTR) {
- // runtime_printf("runtime.SetFinalizer: first argument is %S, not pointer\n", *obj.type->string);
+ runtime_printf("runtime.SetFinalizer: first argument is %S, not pointer\n", *obj.__type_descriptor->__reflection);
goto throw;
}
if(!runtime_mlookup(obj.__object, &base, &size, nil) || obj.__object != base) {
- // runtime_printf("runtime.SetFinalizer: pointer not at beginning of allocated block\n");
+ runtime_printf("runtime.SetFinalizer: pointer not at beginning of allocated block\n");
goto throw;
}
ft = nil;
@@ -494,7 +494,7 @@ func SetFinalizer(obj Eface, finalizer E
return;
badfunc:
- // runtime_printf("runtime.SetFinalizer: second argument is %S, not func(%S)\n", *finalizer.type->string, *obj.type->string);
+ runtime_printf("runtime.SetFinalizer: second argument is %S, not func(%S)\n", *finalizer.__type_descriptor->__reflection, *obj.__type_descriptor->__reflection);
throw:
runtime_throw("runtime.SetFinalizer");
}
Index: libgo/runtime/go-print.c
===================================================================
--- libgo/runtime/go-print.c (revision 187847)
+++ libgo/runtime/go-print.c (revision 187848)
@@ -8,6 +8,7 @@
#include <stdint.h>
#include <stdio.h>
+#include "runtime.h"
#include "array.h"
#include "go-panic.h"
#include "go-string.h"
@@ -17,154 +18,20 @@
the predeclared functions print/println/panic/panicln. */
void
-__go_print_space ()
-{
- putc (' ', stderr);
-}
-
-void
-__go_print_nl ()
-{
- putc ('\n', stderr);
-}
-
-void
-__go_print_string (struct __go_string val)
-{
- fprintf (stderr, "%.*s", (int) val.__length, (const char *) val.__data);
-}
-
-void
-__go_print_uint64 (uint64_t val)
-{
- fprintf (stderr, "%llu", (unsigned long long) val);
-}
-
-void
-__go_print_int64 (int64_t val)
-{
- fprintf (stderr, "%lld", (long long) val);
-}
-
-void
-__go_print_double (double v)
-{
- char buf[20];
- int e, s, i, n;
- double h;
-
- if (isnan (v))
- {
- fputs ("NaN", stderr);
- return;
- }
- if (__builtin_isinf (v))
- {
- putc (v < 0 ? '-' : '+', stderr);
- fputs ("Inf", stderr);
- return;
- }
-
- /* The number of digits printed. */
- n = 7;
- /* The exponent. */
- e = 0;
- /* The sign. */
- s = 0;
- if (v != 0)
- {
- if (v < 0)
- {
- v = -v;
- s = 1;
- }
-
- /* Normalize. */
- while (v >= 10)
- {
- ++e;
- v /= 10;
- }
- while (v < 1)
- {
- --e;
- v *= 10;
- }
-
- /* Round. */
- h = 5;
- for (i = 0; i < n; ++i)
- h /= 10;
-
- v += h;
- if (v >= 10)
- {
- ++e;
- v /= 10;
- }
- }
-
- /* The format is +d.dddd+edd. */
- buf[0] = s ? '-' : '+';
- for (i = 0; i < n; ++i)
- {
- int d;
-
- d = v;
- buf[i + 2] = d + '0';
- v -= d;
- v *= 10;
- }
- buf[1] = buf[2];
- buf[2] = '.';
-
- buf[n + 2] = 'e';
- buf[n + 3] = e < 0 ? '-' : '+';
- if (e < 0)
- e = - e;
- buf[n + 4] = e / 100 + '0';
- buf[n + 5] = (e / 10) % 10 + '0';
- buf[n + 6] = e % 10 + '0';
- buf[n + 7] = '\0';
- fputs (buf, stderr);
-}
-
-void
-__go_print_complex (__complex double val)
-{
- putc ('(', stderr);
- __go_print_double (__builtin_creal (val));
- __go_print_double (__builtin_cimag (val));
- fputs ("i)", stderr);
-}
-
-void
-__go_print_bool (_Bool val)
-{
- fputs (val ? "true" : "false", stderr);
-}
-
-void
-__go_print_pointer (void *val)
-{
- fprintf (stderr, "0x%lx", (unsigned long) (uintptr_t) val);
-}
-
-void
__go_print_empty_interface (struct __go_empty_interface e)
{
- fprintf (stderr, "(%p,%p)", e.__type_descriptor, e.__object);
+ runtime_printf ("(%p,%p)", e.__type_descriptor, e.__object);
}
void
__go_print_interface (struct __go_interface i)
{
- fprintf (stderr, "(%p,%p)", i.__methods, i.__object);
+ runtime_printf ("(%p,%p)", i.__methods, i.__object);
}
void
__go_print_slice (struct __go_open_array val)
{
- fprintf (stderr, "[%d/%d]", val.__count, val.__capacity);
- __go_print_pointer (val.__values);
+ runtime_printf ("[%d/%d]", val.__count, val.__capacity);
+ runtime_printpointer (val.__values);
}
Index: libgo/runtime/go-assert.c
===================================================================
--- libgo/runtime/go-assert.c (revision 187847)
+++ libgo/runtime/go-assert.c (revision 187848)
@@ -7,12 +7,13 @@
#include <stdio.h>
#include <stdlib.h>
+#include "runtime.h"
#include "go-assert.h"
void
__go_assert_fail (const char *file, unsigned int lineno)
{
/* FIXME: Eventually we should dump a stack trace here. */
- fprintf (stderr, "%s:%u: libgo assertion failure\n", file, lineno);
+ runtime_printf ("%s:%U: libgo assertion failure\n", file, (uint64) lineno);
abort ();
}
Index: libgo/runtime/runtime.c
===================================================================
--- libgo/runtime/runtime.c (revision 187847)
+++ libgo/runtime/runtime.c (revision 187848)
@@ -236,3 +236,15 @@ runtime_showframe(const unsigned char *s
traceback = runtime_gotraceback();
return traceback > 1 || (__builtin_strchr((const char*)s, '.') != nil && __builtin_memcmp(s, "runtime.", 7) != 0);
}
+
+bool
+runtime_isInf(float64 f, int32 sign)
+{
+ if(!__builtin_isinf(f))
+ return false;
+ if(sign == 0)
+ return true;
+ if(sign > 0)
+ return f > 0;
+ return f < 0;
+}
Index: libgo/runtime/runtime.h
===================================================================
--- libgo/runtime/runtime.h (revision 187847)
+++ libgo/runtime/runtime.h (revision 187848)
@@ -14,6 +14,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
+#include <unistd.h>
#include <pthread.h>
#include <semaphore.h>
#include <ucontext.h>
@@ -275,6 +276,7 @@ int32 runtime_ncpu;
* common functions and data
*/
int32 runtime_findnull(const byte*);
+void runtime_dump(byte*, int32);
/*
* very low level c-called
@@ -286,6 +288,8 @@ void runtime_goenvs(void);
void runtime_goenvs_unix(void);
void runtime_throw(const char*) __attribute__ ((noreturn));
void runtime_panicstring(const char*) __attribute__ ((noreturn));
+void runtime_prints(const char*);
+void runtime_printf(const char*, ...);
void* runtime_mal(uintptr);
void runtime_schedinit(void);
void runtime_initsig(void);
@@ -374,9 +378,35 @@ void __wrap_rtems_task_variable_add(void
#endif
/*
+ * Names generated by gccgo.
+ */
+#define runtime_printbool __go_print_bool
+#define runtime_printfloat __go_print_double
+#define runtime_printint __go_print_int64
+#define runtime_printiface __go_print_interface
+#define runtime_printeface __go_print_empty_interface
+#define runtime_printstring __go_print_string
+#define runtime_printpointer __go_print_pointer
+#define runtime_printuint __go_print_uint64
+#define runtime_printslice __go_print_slice
+#define runtime_printcomplex __go_print_complex
+
+/*
* runtime go-called
*/
-void runtime_panic(Eface);
+void runtime_printbool(_Bool);
+void runtime_printfloat(double);
+void runtime_printint(int64);
+void runtime_printiface(Iface);
+void runtime_printeface(Eface);
+void runtime_printstring(String);
+void runtime_printpc(void*);
+void runtime_printpointer(void*);
+void runtime_printuint(uint64);
+void runtime_printhex(uint64);
+void runtime_printslice(Slice);
+void runtime_printcomplex(__complex double);
+
struct __go_func_type;
void reflect_call(const struct __go_func_type *, const void *, _Bool, _Bool,
void **, void **)
@@ -384,7 +414,7 @@ void reflect_call(const struct __go_func
/* Functions. */
#define runtime_panic __go_panic
-#define runtime_printf printf
+#define runtime_write(d, v, n) write((d), (v), (n))
#define runtime_malloc(s) __go_alloc(s)
#define runtime_free(p) __go_free(p)
#define runtime_strcmp(s1, s2) __builtin_strcmp((s1), (s2))
@@ -432,6 +462,8 @@ void runtime_newErrorString(String, Efac
/*
* wrapped for go users
*/
+bool runtime_isInf(float64 f, int32 sign);
+#define runtime_isNaN(f) __builtin_isnan(f)
void runtime_semacquire(uint32 volatile *);
void runtime_semrelease(uint32 volatile *);
int32 runtime_gomaxprocsfunc(int32 n);
Index: libgo/runtime/go-panic.c
===================================================================
--- libgo/runtime/go-panic.c (revision 187847)
+++ libgo/runtime/go-panic.c (revision 187848)
@@ -24,13 +24,13 @@ __printpanics (struct __go_panic_stack *
if (p->__next != NULL)
{
__printpanics (p->__next);
- fprintf (stderr, "\t");
+ runtime_printf ("\t");
}
- fprintf (stderr, "panic: ");
+ runtime_printf ("panic: ");
runtime_printany (p->__arg);
if (p->__was_recovered)
- fprintf (stderr, " [recovered]");
- fputc ('\n', stderr);
+ runtime_printf (" [recovered]");
+ runtime_printf ("\n");
}
/* This implements __go_panic which is used for the panic
Index: libgo/runtime/mgc0.c
===================================================================
--- libgo/runtime/mgc0.c (revision 187847)
+++ libgo/runtime/mgc0.c (revision 187848)
@@ -159,7 +159,7 @@ scanblock(byte *b, int64 n)
bool keepworking;
if((int64)(uintptr)n != n || n < 0) {
- // runtime_printf("scanblock %p %lld\n", b, (long long)n);
+ runtime_printf("scanblock %p %D\n", b, n);
runtime_throw("scanblock");
}
@@ -190,7 +190,7 @@ scanblock(byte *b, int64 n)
// Each iteration scans the block b of length n, queueing pointers in
// the work buffer.
if(Debug > 1)
- runtime_printf("scanblock %p %lld\n", b, (long long) n);
+ runtime_printf("scanblock %p %D\n", b, n);
vp = (void**)b;
n >>= (2+PtrSize/8); /* n /= PtrSize (4 or 8) */
@@ -346,7 +346,7 @@ debug_scanblock(byte *b, int64 n)
runtime_throw("debug_scanblock without DebugMark");
if((int64)(uintptr)n != n || n < 0) {
- //runtime_printf("debug_scanblock %p %D\n", b, n);
+ runtime_printf("debug_scanblock %p %D\n", b, n);
runtime_throw("debug_scanblock");
}
@@ -1047,14 +1047,13 @@ runtime_gc(int32 force)
mstats.pause_total_ns += t3 - t0;
mstats.numgc++;
if(mstats.debuggc)
- runtime_printf("pause %llu\n", (unsigned long long)t3-t0);
+ runtime_printf("pause %D\n", t3-t0);
if(gctrace) {
- runtime_printf("gc%d(%d): %llu+%llu+%llu ms %llu -> %llu MB %llu -> %llu (%llu-%llu) objects %llu handoff\n",
- mstats.numgc, work.nproc, (unsigned long long)(t1-t0)/1000000, (unsigned long long)(t2-t1)/1000000, (unsigned long long)(t3-t2)/1000000,
- (unsigned long long)heap0>>20, (unsigned long long)heap1>>20, (unsigned long long)obj0, (unsigned long long)obj1,
- (unsigned long long) mstats.nmalloc, (unsigned long long)mstats.nfree,
- (unsigned long long) nhandoff);
+ runtime_printf("gc%d(%d): %D+%D+%D ms, %D -> %D MB %D -> %D (%D-%D) objects\n",
+ mstats.numgc, work.nproc, (t1-t0)/1000000, (t2-t1)/1000000, (t3-t2)/1000000,
+ heap0>>20, heap1>>20, obj0, obj1,
+ mstats.nmalloc, mstats.nfree);
}
runtime_MProf_GC();
@@ -1152,8 +1151,8 @@ runtime_markallocated(void *v, uintptr n
{
uintptr *b, obits, bits, off, shift;
- // if(0)
- // runtime_printf("markallocated %p+%p\n", v, n);
+ if(0)
+ runtime_printf("markallocated %p+%p\n", v, n);
if((byte*)v+n > (byte*)runtime_mheap.arena_used || (byte*)v < runtime_mheap.arena_start)
runtime_throw("markallocated: bad pointer");
@@ -1184,8 +1183,8 @@ runtime_markfreed(void *v, uintptr n)
{
uintptr *b, obits, bits, off, shift;
- // if(0)
- // runtime_printf("markallocated %p+%p\n", v, n);
+ if(0)
+ runtime_printf("markallocated %p+%p\n", v, n);
if((byte*)v+n > (byte*)runtime_mheap.arena_used || (byte*)v < runtime_mheap.arena_start)
runtime_throw("markallocated: bad pointer");
@@ -1227,7 +1226,7 @@ runtime_checkfreed(void *v, uintptr n)
bits = *b>>shift;
if((bits & bitAllocated) != 0) {
runtime_printf("checkfreed %p+%p: off=%p have=%p\n",
- v, (void*)n, (void*)off, (void*)(bits & bitMask));
+ v, n, off, bits & bitMask);
runtime_throw("checkfreed: not freed");
}
}
Index: libgo/runtime/mheap.c
===================================================================
--- libgo/runtime/mheap.c (revision 187847)
+++ libgo/runtime/mheap.c (revision 187848)
@@ -191,7 +191,7 @@ MHeap_Grow(MHeap *h, uintptr npage)
v = runtime_MHeap_SysAlloc(h, ask);
}
if(v == nil) {
- runtime_printf("runtime: out of memory: cannot allocate %llu-byte block (%llu in use)\n", (unsigned long long)ask, (unsigned long long)mstats.heap_sys);
+ runtime_printf("runtime: out of memory: cannot allocate %D-byte block (%D in use)\n", (uint64)ask, mstats.heap_sys);
return false;
}
}
@@ -277,7 +277,7 @@ MHeap_FreeLocked(MHeap *h, MSpan *s)
PageID p;
if(s->state != MSpanInUse || s->ref != 0) {
- // runtime_printf("MHeap_FreeLocked - span %p ptr %p state %d ref %d\n", s, s->start<<PageShift, s->state, s->ref);
+ runtime_printf("MHeap_FreeLocked - span %p ptr %p state %d ref %d\n", s, s->start<<PageShift, s->state, s->ref);
runtime_throw("MHeap_FreeLocked - invalid free");
}
mstats.heap_idle += s->npages<<PageShift;
@@ -397,10 +397,10 @@ runtime_MHeap_Scavenger(void* dummy)
if(trace) {
if(sumreleased > 0)
- runtime_printf("scvg%d: %p MB released\n", k, (void*)(sumreleased>>20));
- runtime_printf("scvg%d: inuse: %lld, idle: %lld, sys: %lld, released: %lld, consumed: %lld (MB)\n",
- k, (long long)(mstats.heap_inuse>>20), (long long)(mstats.heap_idle>>20), (long long)(mstats.heap_sys>>20),
- (long long)(mstats.heap_released>>20), (long long)((mstats.heap_sys - mstats.heap_released)>>20));
+ runtime_printf("scvg%d: %p MB released\n", k, sumreleased>>20);
+ runtime_printf("scvg%d: inuse: %D, idle: %D, sys: %D, released: %D, consumed: %D (MB)\n",
+ k, mstats.heap_inuse>>20, mstats.heap_idle>>20, mstats.heap_sys>>20,
+ mstats.heap_released>>20, (mstats.heap_sys - mstats.heap_released)>>20);
}
}
}
@@ -451,7 +451,7 @@ void
runtime_MSpanList_Insert(MSpan *list, MSpan *span)
{
if(span->next != nil || span->prev != nil) {
- // runtime_printf("failed MSpanList_Insert %p %p %p\n", span, span->next, span->prev);
+ runtime_printf("failed MSpanList_Insert %p %p %p\n", span, span->next, span->prev);
runtime_throw("MSpanList_Insert");
}
span->next = list->next;
Index: libgo/merge.sh
===================================================================
--- libgo/merge.sh (revision 187847)
+++ libgo/merge.sh (revision 187848)
@@ -163,7 +163,7 @@ done
done
done
-runtime="chan.c cpuprof.c lock_futex.c lock_sema.c mcache.c mcentral.c mfinal.c mfixalloc.c mgc0.c mheap.c msize.c proc.c runtime.c runtime.h signal_unix.c malloc.h malloc.goc mprof.goc runtime1.goc sema.goc sigqueue.goc string.goc time.goc"
+runtime="chan.c cpuprof.c lock_futex.c lock_sema.c mcache.c mcentral.c mfinal.c mfixalloc.c mgc0.c mheap.c msize.c print.c proc.c runtime.c runtime.h signal_unix.c malloc.h malloc.goc mprof.goc runtime1.goc sema.goc sigqueue.goc string.goc time.goc"
for f in $runtime; do
merge_c $f $f
done
Index: libgo/Makefile.am
===================================================================
--- libgo/Makefile.am (revision 187847)
+++ libgo/Makefile.am (revision 187848)
@@ -465,6 +465,7 @@ runtime_files = \
runtime/mgc0.c \
runtime/mheap.c \
runtime/msize.c \
+ runtime/print.c \
runtime/proc.c \
runtime/runtime.c \
runtime/signal_unix.c \
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-06-24 3:19 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-05-24 20:45 libgo patch committed: Copy runtime_printf from other library Ian Lance Taylor
[not found] ` <4FE67012.2000703@chamberlain.net.au>
2012-06-24 6:59 ` Ian Lance Taylor
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).