From ff082cab8150ceabc83e2321824c5a4f372df396 Mon Sep 17 00:00:00 2001 From: Rainer Orth Date: Thu, 28 Nov 2013 12:27:58 +0000 Subject: [PATCH] Add -lrt on Solaris 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 | 4 ++++ gcc/config/sol2.h | 3 +++ gcc/cp/ChangeLog | 6 ++++++ gcc/cp/g++spec.c | 38 +++++++++++++++++++++++++++++++++++--- 4 files changed, 48 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 49aad278f56..9ebecda6ecc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2013-11-28 Rainer Orth + + * config/sol2.h (TIME_LIBRARY): Define. + 2013-11-28 Richard Biener PR lto/59323 diff --git a/gcc/config/sol2.h b/gcc/config/sol2.h index 749e16830e3..abd7342aef5 100644 --- a/gcc/config/sol2.h +++ b/gcc/config/sol2.h @@ -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 "" diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index dd279d036a0..adc60267405 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2013-11-28 Rainer Orth + + * g++spec.c (TIMELIB): Define. + (WITHLIBC, SKIPOPT): Adjust values. + (lang_specific_driver): Add TIME_LIBRARY if not passed explicitly. + 2013-11-28 Jakub Jelinek PR c/59310 diff --git a/gcc/cp/g++spec.c b/gcc/cp/g++spec.c index b896eead001..93f94602c92 100644 --- a/gcc/cp/g++spec.c +++ b/gcc/cp/g++spec.c @@ -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)