Message ID | mcrr4lnimq3.fsf@google.com |
---|---|
State | New |
Headers | show |
On Mon, Jan 14, 2013 at 11:33 AM, Ian Lance Taylor <iant@google.com> wrote: > The declaration of __real_pthread_create in generic-morestack-thread.c > had attribute weak. Note that this code is linked with --wrap > pthread_create, so the reference to __real_pthread_create is really to > pthread_create. Using weak was incorrect, because the reference really > is a strong one. There is no support for __real_pthread_create aka > pthread_create to not be defined. It caused some Go programs to fail > when linking statically, because a weak reference does not cause a > symbol definition to be included from an archive. If there was no other > reason to include pthread_create, then pthread_create would never be > defined, so the call to __real_pthread_create would crash at runtime. > > This fixes a regression, as static linking of Go programs used to work. > > Bootstrapped and ran Go testsuite and split-stack tests on > x86_64-unknown-linux-gnu. Committed to mainline. Sigh, this turned out to be wrong because it causes libgcc_s.so to require libpthread.so. Reverted. Ian
On Mon, Jan 14, 2013 at 11:33 AM, Ian Lance Taylor <iant@google.com> wrote: > The declaration of __real_pthread_create in generic-morestack-thread.c > had attribute weak. Note that this code is linked with --wrap > pthread_create, so the reference to __real_pthread_create is really to > pthread_create. Using weak was incorrect, because the reference really > is a strong one. There is no support for __real_pthread_create aka > pthread_create to not be defined. It caused some Go programs to fail > when linking statically, because a weak reference does not cause a > symbol definition to be included from an archive. If there was no other > reason to include pthread_create, then pthread_create would never be > defined, so the call to __real_pthread_create would crash at runtime. > > This fixes a regression, as static linking of Go programs used to work. > > Bootstrapped and ran Go testsuite and split-stack tests on > x86_64-unknown-linux-gnu. Committed to mainline. > > Ian > > > 2013-01-14 Ian Lance Taylor <iant@google.com> > > * generic-morestack-thread.c: Change declaration of > __real_pthread_create to not be weak. > I think you run into: http://sourceware.org/bugzilla/show_bug.cgi?id=14556
Index: generic-morestack-thread.c =================================================================== --- generic-morestack-thread.c (revision 195171) +++ generic-morestack-thread.c (working copy) @@ -136,8 +136,7 @@ int __wrap_pthread_create (pthread_t *, __attribute__ ((visibility ("hidden"))); extern int __real_pthread_create (pthread_t *, const pthread_attr_t *, - void *(*start_routine) (void *), void *) - __attribute__ ((weak)); + void *(*start_routine) (void *), void *); int __wrap_pthread_create (pthread_t *tid, const pthread_attr_t *attr,