This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFC automatic linkage of libquadmath with gfortran: PR driver/46516; libgfortran.spec, multilib search path


Michael Matz wrote:
Oh right. I didn't consider that the lang-specs.h files are all included
together, and not just for the lang-specific driver :-/

There's currently one language specific hook coming right before linking
that you might be able to use: lang_specific_pre_link().  It might work if
you just do 'do_spec ("%:include(libgfortran.spec)")' in there (with the
current contents of libgfortran.spec, i.e. replacing '*lib:') in case
libgfortran.spec wasn't found in one of the -L paths in
lang_specific_driver() function (that is, you'll have to remember state
from lang_specific_driver to lang_specific_pre_link).

Awesome! The attached patch seems to work as it should! I will do some bootstrapping tests, but I think should be fine.


Assuming that no issue pops up: Is this patch OK for committal?

Tobias
diff --git a/gcc/fortran/gfortranspec.c b/gcc/fortran/gfortranspec.c
index 24c9093..d8d9fc2 100644
--- a/gcc/fortran/gfortranspec.c
+++ b/gcc/fortran/gfortranspec.c
@@ -75,6 +75,9 @@ static void append_arg (const struct cl_decoded_option *);
 static unsigned int g77_newargc;
 static struct cl_decoded_option *g77_new_decoded_options;
 
+/* The path to the spec file.  */
+char *spec_file = NULL;
+
 
 /* Return full path name of spec file if it is in DIR, or NULL if
    not.  */
@@ -223,9 +226,6 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options,
   /* Whether we should link a static libgfortran. */
   int static_lib = 0; 
 
-  /* The path to the spec file.  */
-  char *spec_file = NULL;
-
   /* Whether we need to link statically.  */
   int static_linking = 0;
 
@@ -447,9 +447,10 @@ For more information about these matters, see the file named COPYING\n\n"));
 #endif
 
   /* Read the specs file corresponding to libgfortran.
-     If we didn't find the spec file on the -L path, then we hope it
-     is somewhere in the standard install areas.  */
-  append_option (OPT_specs_, spec_file == NULL ? SPEC_FILE : spec_file, 1);
+     If we didn't find the spec file on the -L path, we load it
+     via lang_specific_pre_link.  */
+  if (spec_file)
+    append_option (OPT_specs_, spec_file, 1);
 
   if (verbose && g77_new_decoded_options != g77_x_decoded_options)
     {
@@ -467,8 +468,13 @@ For more information about these matters, see the file named COPYING\n\n"));
 
 /* Called before linking.  Returns 0 on success and -1 on failure.  */
 int
-lang_specific_pre_link (void)	/* Not used for F77.  */
+lang_specific_pre_link (void)
 {
+  if (spec_file)
+    free (spec_file);
+  else
+    do_spec ("%:include(libgfortran.spec)");
+
   return 0;
 }
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]