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
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); }