On Fri, Nov 19, 2010 at 03:59:40PM -0800, Ian Lance Taylor wrote:
> Jack Howarth <[email protected]> writes:
>
> > where you have...
> >
> > void
> > __go_scanstacks (void (*scan) (unsigned char *, int64_t))
> >
> > in gccgo/libgo/runtime/go-go.c but...
> >
> > void __go_scanstacks(void (*scan)(byte *, int64));
> >
> > in gccgo/libgo/runtime/runtime.h.
>
> Thanks. I don't know why this causes an error on Darwin but not on
> GNU/Linux, but I guess I don't care all that much. I just committed a
> patch which should fix the problem.
>
> Ian
Ian,
Actually that wasn't the fix. The change...
Index: libgo/runtime/go-go.c
===================================================================
--- libgo/runtime/go-go.c (revision 166968)
+++ libgo/runtime/go-go.c (working copy)
@@ -43,8 +43,13 @@
/* We stop the threads by sending them the signal GO_SIG_STOP and we
start them by sending them the signal GO_SIG_START. */
+#if defined(__MACH__)
+#define GO_SIG_START SIGUSR1
+#define GO_SIG_STOP SIGUSR2
+#else
#define GO_SIG_START (SIGRTMIN + 1)
#define GO_SIG_STOP (SIGRTMIN + 2)
+#endif
#ifndef SA_RESTART
#define SA_RESTART 0
@@ -428,7 +433,7 @@
with __go_thread_ids_lock held. */
void
-__go_scanstacks (void (*scan) (byte *, int64_t))
+__go_scanstacks (void (*scan) (unsigned char *, int64))
{
pthread_t me;
struct __go_thread_id *p;
solves the problem (int64_t vs int64). I changed it to int64 since
you are using that elsewhere for this call. This allows the build to proceed
to...
rm -f `echo runtime/libruntime.a | sed -e 's|/lib|/|' -e 's/\.a/.gox/'`; test
-d runtime || ../../../gccgo/libgo/../install-sh -c -d runtime; rm -f
runtime/libruntime.a; files=`echo ../../../gccgo/libgo/go/runtime/debug.go
../../../gccgo/libgo/go/runtime/error.go
../../../gccgo/libgo/go/runtime/extern.go
../../../gccgo/libgo/go/runtime/sig.go
../../../gccgo/libgo/go/runtime/softfloat64.go
../../../gccgo/libgo/go/runtime/type.go version.go | sed -e 's/[^ ]*\.gox//g'`;
if /bin/sh ./libtool --tag GO --mode=compile
/Users/howarth/darwin_objdir/./gcc/gccgo -B/Users/howarth/darwin_objdir/./gcc/
-minline-all-stringops -O2 -g -c -fgo-prefix="libgo_runtime" -o
runtime/libruntime.a.o $files; then ar rc runtime/libruntime.a
runtime/libruntime.a.o; else exit 1; fi
libtool: compile: /Users/howarth/darwin_objdir/./gcc/gccgo
-B/Users/howarth/darwin_objdir/./gcc/ -minline-all-stringops -O2 -g -c
-fgo-prefix=libgo_runtime ../../../gccgo/libgo/go/runtime/debug.go
../../../gccgo/libgo/go/runtime/error.go
../../../gccgo/libgo/go/runtime/extern.go
../../../gccgo/libgo/go/runtime/sig.go
../../../gccgo/libgo/go/runtime/softfloat64.go
../../../gccgo/libgo/go/runtime/type.go version.go
/var/tmp//ccVFZHcc.s:3:Expected comma after segment-name
/var/tmp//ccVFZHcc.s:3:Rest of line ignored. 1st junk character valued 32 ( ).
/var/tmp//ccVFZHcc.s:3:Junk character 92 (\).
/var/tmp//ccVFZHcc.s:3:Rest of line ignored. 1st junk character valued 49 (1).
../../../gccgo/libgo/go/runtime/error.go:20:19: error: use of undefined type
'Type'
../../../gccgo/libgo/go/runtime/error.go:20:19: error: use of undefined type
'Type'
../../../gccgo/libgo/go/runtime/error.go:20:19: error: use of undefined type
'Type'
../../../gccgo/libgo/go/runtime/error.go:20:19: error: use of undefined type
'Type'
go1: internal compiler error: in do_get_tree, at
go/gofrontend/expressions.cc:1177
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
../../../gccgo/libgo/go/runtime/extern.go:181:23: error: reference to undefined
name 'theGoarch'
../../../gccgo/libgo/go/runtime/extern.go:163:9: error: reference to undefined
name 'defaultGoroot'
../../../gccgo/libgo/go/runtime/extern.go:172:9: error: reference to undefined
name 'theVersion'
../../../gccgo/libgo/go/runtime/extern.go:177:21: error: reference to undefined
name 'theGoos'
/var/tmp//ccVFZHcc.s:3:Expected comma after segment-name
/var/tmp//ccVFZHcc.s:3:Rest of line ignored. 1st junk character valued 32 ( ).
/var/tmp//ccVFZHcc.s:3:Junk character 92 (\).
/var/tmp//ccVFZHcc.s:3:Rest of line ignored. 1st junk character valued 49 (1).
/var/tmp//ccVFZHcc.s:3:Expected comma after segment-name
/var/tmp//ccVFZHcc.s:3:Rest of line ignored. 1st junk character valued 32 ( ).
/var/tmp//ccVFZHcc.s:3:Junk character 92 (\).
/var/tmp//ccVFZHcc.s:3:Rest of line ignored. 1st junk character valued 49 (1).
/var/tmp//ccVFZHcc.s:3:Expected comma after segment-name
/var/tmp//ccVFZHcc.s:3:Rest of line ignored. 1st junk character valued 32 ( ).
/var/tmp//ccVFZHcc.s:3:Junk character 92 (\).
/var/tmp//ccVFZHcc.s:3:Rest of line ignored. 1st junk character valued 49 (1).
/var/tmp//ccVFZHcc.s:3:Expected comma after segment-name
/var/tmp//ccVFZHcc.s:3:Rest of line ignored. 1st junk character valued 32 ( ).
/var/tmp//ccVFZHcc.s:3:Junk character 92 (\).
/var/tmp//ccVFZHcc.s:3:Rest of line ignored. 1st junk character valued 49 (1).
make[4]: *** [runtime/libruntime.a] Error 1
make[3]: *** [all-recursive] Error 1
make[2]: *** [all] Error 2
make[1]: *** [all-target-libgo] Error 2
make: *** [all] Error 2
So it appears that Go needs to learn about the Mach-O object file format.
Jack
o