Add -lrt on Solaris
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Thu, 28 Nov 2013 12:27:58 +0000 (12:27 +0000)
committerRainer Orth <ro@gcc.gnu.org>
Thu, 28 Nov 2013 12:27:58 +0000 (12:27 +0000)
gcc/cp:
* g++spec.c (TIMELIB): Define.
(WITHLIBC, SKIPOPT): Adjust values.
(lang_specific_driver): Add TIME_LIBRARY if not passed explicitly.

gcc:
* config/sol2.h (TIME_LIBRARY): Define.

From-SVN: r205483

gcc/ChangeLog
gcc/config/sol2.h
gcc/cp/ChangeLog
gcc/cp/g++spec.c

index 49aad27..9ebecda 100644 (file)
@@ -1,3 +1,7 @@
+2013-11-28  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * config/sol2.h (TIME_LIBRARY): Define.
+
 2013-11-28  Richard Biener  <rguenther@suse.de>
 
        PR lto/59323
index 749e168..abd7342 100644 (file)
@@ -163,6 +163,9 @@ along with GCC; see the file COPYING3.  If not see
 #undef LINK_ARCH_SPEC
 #define LINK_ARCH_SPEC LINK_ARCH32_SPEC
 
+/* C++11 programs need -lrt for nanosleep.  */
+#define TIME_LIBRARY "rt"
+
 #ifndef USE_GLD
 /* With Sun ld, -rdynamic is a no-op.  */
 #define RDYNAMIC_SPEC ""
index dd279d0..adc6026 100644 (file)
@@ -1,3 +1,9 @@
+2013-11-28  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * g++spec.c (TIMELIB): Define.
+       (WITHLIBC, SKIPOPT): Adjust values.
+       (lang_specific_driver): Add TIME_LIBRARY if not passed explicitly.
+
 2013-11-28  Jakub Jelinek  <jakub@redhat.com>
 
        PR c/59310
index b896eea..93f9460 100644 (file)
@@ -28,10 +28,12 @@ along with GCC; see the file COPYING3.  If not see
 #define LANGSPEC       (1<<1)
 /* This bit is set if they did `-lm' or `-lmath'.  */
 #define MATHLIB                (1<<2)
+/* This bit is set if they did `-lrt' or equivalent.  */
+#define TIMELIB                (1<<3)
 /* This bit is set if they did `-lc'.  */
-#define WITHLIBC       (1<<3)
+#define WITHLIBC       (1<<4)
 /* Skip this option.  */
-#define SKIPOPT                (1<<4)
+#define SKIPOPT                (1<<5)
 
 #ifndef MATH_LIBRARY
 #define MATH_LIBRARY "m"
@@ -40,6 +42,10 @@ along with GCC; see the file COPYING3.  If not see
 #define MATH_LIBRARY_PROFILE MATH_LIBRARY
 #endif
 
+#ifndef TIME_LIBRARY
+#define TIME_LIBRARY ""
+#endif
+
 #ifndef LIBSTDCXX
 #define LIBSTDCXX "stdc++"
 #endif
@@ -83,16 +89,22 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options,
   /* "-lm" or "-lmath" if it appears on the command line.  */
   const struct cl_decoded_option *saw_math = NULL;
 
+  /* "-lrt" or eqivalent if it appears on the command line.  */
+  const struct cl_decoded_option *saw_time = NULL;
+
   /* "-lc" if it appears on the command line.  */
   const struct cl_decoded_option *saw_libc = NULL;
 
   /* An array used to flag each argument that needs a bit set for
-     LANGSPEC, MATHLIB, or WITHLIBC.  */
+     LANGSPEC, MATHLIB, TIMELIB, or WITHLIBC.  */
   int *args;
 
   /* By default, we throw on the math library if we have one.  */
   int need_math = (MATH_LIBRARY[0] != '\0');
 
+  /* By default, we throw on the time library if we have one.  */
+  int need_time = (TIME_LIBRARY[0] != '\0');
+
   /* True if we saw -static.  */
   int static_link = 0;
 
@@ -136,6 +148,11 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options,
              args[i] |= MATHLIB;
              need_math = 0;
            }
+         else if (strcmp (arg, TIME_LIBRARY) == 0)
+           {
+             args[i] |= TIMELIB;
+             need_time = 0;
+           }
          else if (strcmp (arg, "c") == 0)
            args[i] |= WITHLIBC;
          else
@@ -268,6 +285,12 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options,
          saw_math = &decoded_options[i];
        }
 
+      if (!saw_time && (args[i] & TIMELIB) && library > 0)
+       {
+         --j;
+         saw_time = &decoded_options[i];
+       }
+
       if (!saw_libc && (args[i] & WITHLIBC) && library > 0)
        {
          --j;
@@ -352,6 +375,15 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options,
       added_libraries++;
       j++;
     }
+  if (saw_time)
+    new_decoded_options[j++] = *saw_time;
+  else if (library > 0 && need_time)
+    {
+      generate_option (OPT_l, TIME_LIBRARY, 1, CL_DRIVER,
+                      &new_decoded_options[j]);
+      added_libraries++;
+      j++;
+    }
   if (saw_libc)
     new_decoded_options[j++] = *saw_libc;
   if (shared_libgcc && !static_link)