This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] gcc/go/gospec.c: fix static linking of Go programs (issue 7130047)
- From: minux dot ma at gmail dot com
- To: iant at golang dot org
- Cc: gcc-patches at gcc dot gnu dot org, reply at codereview-hr dot appspotmail dot com
- Date: Wed, 16 Jan 2013 15:57:24 +0000
- Subject: Re: [PATCH] gcc/go/gospec.c: fix static linking of Go programs (issue 7130047)
- Reply-to: minux dot ma at gmail dot com, iant at golang dot org, gcc-patches at gcc dot gnu dot org, reply at codereview-hr dot appspotmail dot com
Reviewers: iant,
Message:
please take another look.
Description:
2013-01-16 Shenghou Ma <minux.ma@gmail.com>
* gospec.c: pass -u pthread_create to linker when static linking.
Please review this at https://codereview.appspot.com/7130047/
Affected files:
M gcc/go/gospec.c
Index: gcc/go/gospec.c
===================================================================
--- gcc/go/gospec.c (revision 195240)
+++ gcc/go/gospec.c (working copy)
@@ -227,7 +227,7 @@
#endif
/* Make sure to have room for the trailing NULL argument. */
- num_args = argc + need_math + shared_libgcc + (library > 0) * 5 + 5;
+ num_args = argc + need_math + shared_libgcc + (library > 0) * 5 + 10;
new_decoded_options = XNEWVEC (struct cl_decoded_option, num_args);
i = 0;
@@ -381,6 +381,20 @@
generate_option (OPT_shared_libgcc, NULL, 1, CL_DRIVER,
&new_decoded_options[j++]);
+#ifdef TARGET_CAN_SPLIT_STACK
+ /* libgcc wraps pthread_create to support split stack, however, due to
+ relative ordering of -lpthread and -lgcc, we can't just mark
+ __real_pthread_create in libgcc as non-weak. But we need to link in
+ pthread_create from pthread if we are statically linking, so we work-
+ around by passing -u pthread_create to to the linker. */
+ if (static_link)
+ {
+ generate_option (OPT_Wl_, "-u,pthread_create", 1, CL_DRIVER,
+ &new_decoded_options[j]);
+ j++;
+ }
+#endif
+
*in_decoded_options_count = j;
*in_decoded_options = new_decoded_options;
*in_added_libraries = added_libraries;