Allow one to profile FORTRAN77 programs.

This commit is contained in:
David E. O'Brien 2002-06-09 00:03:56 +00:00
parent 0b2577457c
commit 60f9b09d26
3 changed files with 35 additions and 7 deletions

View File

@ -18,6 +18,8 @@ along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330, the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
/* $FreeBSD$ */
/* This file contains a filter for the main `gcc' driver, which is /* This file contains a filter for the main `gcc' driver, which is
replicated for the `g77' driver by adding this filter. The purpose replicated for the `g77' driver by adding this filter. The purpose
of this filter is to be basically identical to gcc (in that of this filter is to be basically identical to gcc (in that
@ -52,14 +54,23 @@ Boston, MA 02111-1307, USA. */
#ifndef MATH_LIBRARY #ifndef MATH_LIBRARY
#define MATH_LIBRARY "-lm" #define MATH_LIBRARY "-lm"
#endif #endif
#ifndef MATH_LIBRARY_PROFILE
#define MATH_LIBRARY_PROFILE "-lm"
#endif
#ifndef FORTRAN_INIT #ifndef FORTRAN_INIT
#define FORTRAN_INIT "-lfrtbegin" #define FORTRAN_INIT "-lfrtbegin"
#endif #endif
#ifndef FORTRAN_INIT_PROFILE
#define FORTRAN_INIT_PROFILE "-lfrtbegin"
#endif
#ifndef FORTRAN_LIBRARY #ifndef FORTRAN_LIBRARY
#define FORTRAN_LIBRARY "-lg2c" #define FORTRAN_LIBRARY "-lg2c"
#endif #endif
#ifndef FORTRAN_LIBRARY_PROFILE
#define FORTRAN_LIBRARY_PROFILE "-lg2c"
#endif
/* Options this driver needs to recognize, not just know how to /* Options this driver needs to recognize, not just know how to
skip over. */ skip over. */
@ -79,6 +90,7 @@ typedef enum
OPTION_nostdlib, /* Aka --no-standard-libraries, or OPTION_nostdlib, /* Aka --no-standard-libraries, or
-nodefaultlibs. */ -nodefaultlibs. */
OPTION_o, /* Aka --output. */ OPTION_o, /* Aka --output. */
OPTION_p, /* Aka --profile. */
OPTION_S, /* Aka --assemble. */ OPTION_S, /* Aka --assemble. */
OPTION_syntax_only, /* -fsyntax-only. */ OPTION_syntax_only, /* -fsyntax-only. */
OPTION_v, /* Aka --verbose. */ OPTION_v, /* Aka --verbose. */
@ -167,6 +179,9 @@ lookup_option (xopt, xskip, xarg, text)
opt = OPTION_L, arg = text + 2; opt = OPTION_L, arg = text + 2;
else if (text[1] == 'o') else if (text[1] == 'o')
opt = OPTION_o; opt = OPTION_o;
else if ((text[1] == 'p') && (text[2] == '\0')
|| (text[1] == 'p') && (text[2] == 'g') && (text[3] == '\0'))
opt = OPTION_p;
else if ((text[1] == 'S') && (text[2] == '\0')) else if ((text[1] == 'S') && (text[2] == '\0'))
opt = OPTION_S, skip = 0; opt = OPTION_S, skip = 0;
else if (text[1] == 'V') else if (text[1] == 'V')
@ -291,6 +306,9 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries)
/* By default, we throw on the math library if we have one. */ /* By default, we throw on the math library if we have one. */
int need_math = (MATH_LIBRARY[0] != '\0'); int need_math = (MATH_LIBRARY[0] != '\0');
/* If non-zero, the user gave us the `-p' or `-pg' flag. */
int saw_profile_flag = 0;
/* The number of input and output files in the incoming arg list. */ /* The number of input and output files in the incoming arg list. */
int n_infiles = 0; int n_infiles = 0;
int n_outfiles = 0; int n_outfiles = 0;
@ -359,6 +377,11 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries)
++n_outfiles; ++n_outfiles;
break; break;
case OPTION_p:
saw_profile_flag = 1;
library = FORTRAN_LIBRARY_PROFILE;
break;
case OPTION_v: case OPTION_v:
verbose = 1; verbose = 1;
break; break;
@ -432,7 +455,7 @@ or type the command `info -f g77 Copying'.\n\
/* Not a filename or library. */ /* Not a filename or library. */
if (saw_library == 1 && need_math) /* -l<library>. */ if (saw_library == 1 && need_math) /* -l<library>. */
append_arg (MATH_LIBRARY); append_arg (saw_profile_flag ? MATH_LIBRARY_PROFILE : MATH_LIBRARY);
saw_library = 0; saw_library = 0;
@ -483,10 +506,12 @@ or type the command `info -f g77 Copying'.\n\
{ {
if (0 == use_init) if (0 == use_init)
{ {
append_arg (FORTRAN_INIT); append_arg (saw_profile_flag ? FORTRAN_INIT_PROFILE
: FORTRAN_INIT);
use_init = 1; use_init = 1;
} }
append_arg (FORTRAN_LIBRARY); append_arg (saw_profile_flag ? FORTRAN_LIBRARY_PROFILE
: FORTRAN_LIBRARY);
} }
} }
else if (strcmp (argv[i], FORTRAN_LIBRARY) == 0) else if (strcmp (argv[i], FORTRAN_LIBRARY) == 0)
@ -494,7 +519,8 @@ or type the command `info -f g77 Copying'.\n\
else else
{ /* Other library, or filename. */ { /* Other library, or filename. */
if (saw_library == 1 && need_math) if (saw_library == 1 && need_math)
append_arg (MATH_LIBRARY); append_arg (saw_profile_flag ? MATH_LIBRARY_PROFILE
: MATH_LIBRARY);
saw_library = 0; saw_library = 0;
} }
} }
@ -513,13 +539,14 @@ or type the command `info -f g77 Copying'.\n\
case 0: case 0:
if (0 == use_init) if (0 == use_init)
{ {
append_arg (FORTRAN_INIT); append_arg (saw_profile_flag ? FORTRAN_INIT_PROFILE
: FORTRAN_INIT);
use_init = 1; use_init = 1;
} }
append_arg (library); append_arg (library);
case 1: case 1:
if (need_math) if (need_math)
append_arg (MATH_LIBRARY); append_arg (saw_profile_flag ? MATH_LIBRARY_PROFILE : MATH_LIBRARY);
default: default:
break; break;
} }

View File

@ -51,6 +51,7 @@
#define LIBGCC_SPEC "%{!pg: -lgcc} %{pg: -lgcc_p}" #define LIBGCC_SPEC "%{!pg: -lgcc} %{pg: -lgcc_p}"
#define LIBSTDCXX_PROFILE "-lstdc++_p" #define LIBSTDCXX_PROFILE "-lstdc++_p"
#define MATH_LIBRARY_PROFILE "-lm_p" #define MATH_LIBRARY_PROFILE "-lm_p"
#define FORTRAN_LIBRARY_PROFILE "-lg2c_p"
/* FreeBSD is 4.4BSD derived */ /* FreeBSD is 4.4BSD derived */
#define bsd4_4 #define bsd4_4

View File

@ -10,7 +10,7 @@ SRCS= gcc.c g77spec.c version.c
CFLAGS+= -DDEFAULT_TARGET_VERSION=\"$(version)\" CFLAGS+= -DDEFAULT_TARGET_VERSION=\"$(version)\"
CFLAGS+= -DDEFAULT_TARGET_MACHINE=\"$(target)\" CFLAGS+= -DDEFAULT_TARGET_MACHINE=\"$(target)\"
CFLAGS+= -DFORTRAN_INIT=\"-lg2c\" CFLAGS+= -DFORTRAN_INIT=\"-lg2c\" -DFORTRAN_INIT_PROFILE=\"-lg2c_p\"
DPADD= ${LIBCC_INT} DPADD= ${LIBCC_INT}
LDADD= ${LIBCC_INT} LDADD= ${LIBCC_INT}