Pass -dumpbase and -dumpdir to gcc for LTO
gcc/ 2010-01-03 H.J. Lu <hongjiu.lu@intel.com> PR lto/41564 * common.opt: Add dumpdir. * gcc.c (cc1_options): Add "-dumpbase %B" only if -dumpbase isn't specified. (option_map): Add --dumpdir. * gcc.h (DEFAULT_WORD_SWITCH_TAKES_ARG): Add dumpdir. * lto-wrapper.c (run_gcc): Add -dumpbase and -dumpdir for -o. * opts.c (decode_options): Try dump_dir_name first if dump_base_name isn't an absolute path. (common_handle_option): Handle OPT_dumpdir. * toplev.c (dump_dir_name): New. (print_switch_values): Also ignore -dumpdir. * toplev.h (dump_dir_name): New. gcc/lto/ 2010-01-03 H.J. Lu <hongjiu.lu@intel.com> PR lto/41564 * lto.c (DUMPBASE_SUFFIX): New. (lto_execute_ltrans): Append a sequence number to -dumpbase for LTRANS. From-SVN: r155591
This commit is contained in:
parent
eb07a8f567
commit
d7fb0a6db1
@ -1,3 +1,25 @@
|
|||||||
|
2010-01-03 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
PR lto/41564
|
||||||
|
* common.opt: Add dumpdir.
|
||||||
|
|
||||||
|
* gcc.c (cc1_options): Add "-dumpbase %B" only if -dumpbase
|
||||||
|
isn't specified.
|
||||||
|
(option_map): Add --dumpdir.
|
||||||
|
|
||||||
|
* gcc.h (DEFAULT_WORD_SWITCH_TAKES_ARG): Add dumpdir.
|
||||||
|
|
||||||
|
* lto-wrapper.c (run_gcc): Add -dumpbase and -dumpdir for -o.
|
||||||
|
|
||||||
|
* opts.c (decode_options): Try dump_dir_name first if
|
||||||
|
dump_base_name isn't an absolute path.
|
||||||
|
(common_handle_option): Handle OPT_dumpdir.
|
||||||
|
|
||||||
|
* toplev.c (dump_dir_name): New.
|
||||||
|
(print_switch_values): Also ignore -dumpdir.
|
||||||
|
|
||||||
|
* toplev.h (dump_dir_name): New.
|
||||||
|
|
||||||
2010-01-03 Richard Guenther <rguenther@suse.de>
|
2010-01-03 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
PR tree-optimization/42589
|
PR tree-optimization/42589
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
; Options for the language- and target-independent parts of the compiler.
|
; Options for the language- and target-independent parts of the compiler.
|
||||||
|
|
||||||
; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||||
; Free Software Foundation, Inc.
|
; Free Software Foundation, Inc.
|
||||||
;
|
;
|
||||||
; This file is part of GCC.
|
; This file is part of GCC.
|
||||||
@ -253,6 +253,10 @@ dumpbase
|
|||||||
Common Separate
|
Common Separate
|
||||||
-dumpbase <file> Set the file basename to be used for dumps
|
-dumpbase <file> Set the file basename to be used for dumps
|
||||||
|
|
||||||
|
dumpdir
|
||||||
|
Common Separate
|
||||||
|
-dumpdir <dir> Set the directory name to be used for dumps
|
||||||
|
|
||||||
; The version of the C++ ABI in use. The following values are allowed:
|
; The version of the C++ ABI in use. The following values are allowed:
|
||||||
;
|
;
|
||||||
; 0: The version of the ABI believed most conformant with the C++ ABI
|
; 0: The version of the ABI believed most conformant with the C++ ABI
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
/* Compiler driver program that can handle many languages.
|
/* Compiler driver program that can handle many languages.
|
||||||
Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
||||||
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
|
||||||
|
2010
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GCC.
|
This file is part of GCC.
|
||||||
@ -891,7 +892,7 @@ static const char *cpp_debug_options = "%{d*}";
|
|||||||
/* NB: This is shared amongst all front-ends, except for Ada. */
|
/* NB: This is shared amongst all front-ends, except for Ada. */
|
||||||
static const char *cc1_options =
|
static const char *cc1_options =
|
||||||
"%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
|
"%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
|
||||||
%1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*}\
|
%1 %{!Q:-quiet} %{!dumpbase:-dumpbase %B} %{d*} %{m*} %{a*}\
|
||||||
%{fcompare-debug-second:%:compare-debug-auxbase-opt(%b)} \
|
%{fcompare-debug-second:%:compare-debug-auxbase-opt(%b)} \
|
||||||
%{!fcompare-debug-second:%{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}}%{!c:%{!S:-auxbase %b}} \
|
%{!fcompare-debug-second:%{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}}%{!c:%{!S:-auxbase %b}} \
|
||||||
%{g*} %{O*} %{W*&pedantic*} %{w} %{std*&ansi&trigraphs}\
|
%{g*} %{O*} %{W*&pedantic*} %{w} %{std*&ansi&trigraphs}\
|
||||||
@ -1188,6 +1189,7 @@ static const struct option_map option_map[] =
|
|||||||
{"--dependencies", "-M", 0},
|
{"--dependencies", "-M", 0},
|
||||||
{"--dump", "-d", "a"},
|
{"--dump", "-d", "a"},
|
||||||
{"--dumpbase", "-dumpbase", "a"},
|
{"--dumpbase", "-dumpbase", "a"},
|
||||||
|
{"--dumpdir", "-dumpdir", "a"},
|
||||||
{"--encoding", "-fencoding=", "aj"},
|
{"--encoding", "-fencoding=", "aj"},
|
||||||
{"--entry", "-e", 0},
|
{"--entry", "-e", 0},
|
||||||
{"--extra-warnings", "-W", 0},
|
{"--extra-warnings", "-W", 0},
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Header file for modules that link with gcc.c
|
/* Header file for modules that link with gcc.c
|
||||||
Copyright (C) 1999, 2000, 2001, 2003, 2004, 2007, 2008
|
Copyright (C) 1999, 2000, 2001, 2003, 2004, 2007, 2008, 2010
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GCC.
|
This file is part of GCC.
|
||||||
@ -52,7 +52,8 @@ struct spec_function
|
|||||||
|| !strcmp (STR, "isysroot") \
|
|| !strcmp (STR, "isysroot") \
|
||||||
|| !strcmp (STR, "-param") || !strcmp (STR, "specs") \
|
|| !strcmp (STR, "-param") || !strcmp (STR, "specs") \
|
||||||
|| !strcmp (STR, "MF") || !strcmp (STR, "MT") || !strcmp (STR, "MQ") \
|
|| !strcmp (STR, "MF") || !strcmp (STR, "MT") || !strcmp (STR, "MQ") \
|
||||||
|| !strcmp (STR, "fintrinsic-modules-path") || !strcmp (STR, "dumpbase"))
|
|| !strcmp (STR, "fintrinsic-modules-path") \
|
||||||
|
|| !strcmp (STR, "dumpbase") || !strcmp (STR, "dumpdir"))
|
||||||
|
|
||||||
|
|
||||||
/* These are exported by gcc.c. */
|
/* These are exported by gcc.c. */
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Wrapper to call lto. Used by collect2 and the linker plugin.
|
/* Wrapper to call lto. Used by collect2 and the linker plugin.
|
||||||
Copyright (C) 2009 Free Software Foundation, Inc.
|
Copyright (C) 2009, 2010 Free Software Foundation, Inc.
|
||||||
|
|
||||||
Factored out of collect2 by Rafael Espindola <espindola@google.com>
|
Factored out of collect2 by Rafael Espindola <espindola@google.com>
|
||||||
|
|
||||||
@ -258,7 +258,7 @@ run_gcc (unsigned argc, char *argv[])
|
|||||||
const char **argv_ptr;
|
const char **argv_ptr;
|
||||||
char *list_option_full = NULL;
|
char *list_option_full = NULL;
|
||||||
|
|
||||||
new_argc += 8;
|
new_argc += 12;
|
||||||
new_argv = (const char **) xcalloc (sizeof (char *), new_argc);
|
new_argv = (const char **) xcalloc (sizeof (char *), new_argc);
|
||||||
|
|
||||||
argv_ptr = new_argv;
|
argv_ptr = new_argv;
|
||||||
@ -316,7 +316,31 @@ run_gcc (unsigned argc, char *argv[])
|
|||||||
temporary file for the LTO output. The `-o' option
|
temporary file for the LTO output. The `-o' option
|
||||||
will be interpreted by the linker. */
|
will be interpreted by the linker. */
|
||||||
if (s[2] == '\0')
|
if (s[2] == '\0')
|
||||||
i++;
|
{
|
||||||
|
char *output_dir, *base, *name;
|
||||||
|
|
||||||
|
i++;
|
||||||
|
output_dir = xstrdup (argv[i]);
|
||||||
|
base = output_dir;
|
||||||
|
for (name = base; *name; name++)
|
||||||
|
if (IS_DIR_SEPARATOR (*name))
|
||||||
|
base = name + 1;
|
||||||
|
*base = '\0';
|
||||||
|
|
||||||
|
*argv_ptr++ = "-dumpbase";
|
||||||
|
if (*output_dir == '\0')
|
||||||
|
{
|
||||||
|
static char current_dir[] =
|
||||||
|
{ '.', DIR_SEPARATOR, '\0' };
|
||||||
|
output_dir = current_dir;
|
||||||
|
*argv_ptr++ = argv[i];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
*argv_ptr++ = &argv[i][base - output_dir];
|
||||||
|
|
||||||
|
*argv_ptr++ = "-dumpdir";
|
||||||
|
*argv_ptr++ = output_dir;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
/* Pass the option or argument to LTO. */
|
/* Pass the option or argument to LTO. */
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2010-01-03 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
PR lto/41564
|
||||||
|
* lto.c (DUMPBASE_SUFFIX): New.
|
||||||
|
(lto_execute_ltrans): Append a sequence number to -dumpbase
|
||||||
|
for LTRANS.
|
||||||
|
|
||||||
2010-01-02 H.J. Lu <hongjiu.lu@intel.com>
|
2010-01-02 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR lto/42580
|
PR lto/42580
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Top-level LTO routines.
|
/* Top-level LTO routines.
|
||||||
Copyright 2009 Free Software Foundation, Inc.
|
Copyright 2009, 2010 Free Software Foundation, Inc.
|
||||||
Contributed by CodeSourcery, Inc.
|
Contributed by CodeSourcery, Inc.
|
||||||
|
|
||||||
This file is part of GCC.
|
This file is part of GCC.
|
||||||
@ -1069,6 +1069,8 @@ lto_wpa_write_files (void)
|
|||||||
return output_files;
|
return output_files;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Template of LTRANS dumpbase suffix. */
|
||||||
|
#define DUMPBASE_SUFFIX ".ltrans18446744073709551615"
|
||||||
|
|
||||||
/* Perform local transformations (LTRANS) on the files in the NULL-terminated
|
/* Perform local transformations (LTRANS) on the files in the NULL-terminated
|
||||||
FILES array. These should have been written previously by
|
FILES array. These should have been written previously by
|
||||||
@ -1088,6 +1090,8 @@ lto_execute_ltrans (char *const *files)
|
|||||||
int err;
|
int err;
|
||||||
int status;
|
int status;
|
||||||
FILE *ltrans_output_list_stream = NULL;
|
FILE *ltrans_output_list_stream = NULL;
|
||||||
|
bool seen_dumpbase = false;
|
||||||
|
char *dumpbase_suffix = NULL;
|
||||||
|
|
||||||
timevar_push (TV_WHOPR_WPA_LTRANS_EXEC);
|
timevar_push (TV_WHOPR_WPA_LTRANS_EXEC);
|
||||||
|
|
||||||
@ -1126,13 +1130,26 @@ lto_execute_ltrans (char *const *files)
|
|||||||
++j;
|
++j;
|
||||||
obstack_init (&env_obstack);
|
obstack_init (&env_obstack);
|
||||||
obstack_grow (&env_obstack, &collect_gcc_options[i], j - i);
|
obstack_grow (&env_obstack, &collect_gcc_options[i], j - i);
|
||||||
obstack_1grow (&env_obstack, 0);
|
if (seen_dumpbase)
|
||||||
|
obstack_grow (&env_obstack, DUMPBASE_SUFFIX,
|
||||||
|
sizeof (DUMPBASE_SUFFIX));
|
||||||
|
else
|
||||||
|
obstack_1grow (&env_obstack, 0);
|
||||||
option = XOBFINISH (&env_obstack, char *);
|
option = XOBFINISH (&env_obstack, char *);
|
||||||
|
if (seen_dumpbase)
|
||||||
|
{
|
||||||
|
dumpbase_suffix = option + 7 + j - i;
|
||||||
|
seen_dumpbase = false;
|
||||||
|
}
|
||||||
|
|
||||||
/* LTRANS does not need -fwpa nor -fltrans-*. */
|
/* LTRANS does not need -fwpa nor -fltrans-*. */
|
||||||
if (strncmp (option, "-fwpa", 5) != 0
|
if (strncmp (option, "-fwpa", 5) != 0
|
||||||
&& strncmp (option, "-fltrans-", 9) != 0)
|
&& strncmp (option, "-fltrans-", 9) != 0)
|
||||||
*argv_ptr++ = option;
|
{
|
||||||
|
if (strncmp (option, "-dumpbase", 9) == 0)
|
||||||
|
seen_dumpbase = true;
|
||||||
|
*argv_ptr++ = option;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
*argv_ptr++ = "-fltrans";
|
*argv_ptr++ = "-fltrans";
|
||||||
|
|
||||||
@ -1190,6 +1207,11 @@ lto_execute_ltrans (char *const *files)
|
|||||||
argv_ptr[2] = files[i];
|
argv_ptr[2] = files[i];
|
||||||
argv_ptr[3] = NULL;
|
argv_ptr[3] = NULL;
|
||||||
|
|
||||||
|
/* Append a sequence number to -dumpbase for LTRANS. */
|
||||||
|
if (dumpbase_suffix)
|
||||||
|
snprintf (dumpbase_suffix, sizeof (DUMPBASE_SUFFIX) - 7,
|
||||||
|
"%lu", (unsigned long) i);
|
||||||
|
|
||||||
/* Execute the driver. */
|
/* Execute the driver. */
|
||||||
pex = pex_init (0, "lto1", NULL);
|
pex = pex_init (0, "lto1", NULL);
|
||||||
if (pex == NULL)
|
if (pex == NULL)
|
||||||
|
43
gcc/opts.c
43
gcc/opts.c
@ -1,5 +1,5 @@
|
|||||||
/* Command line option handling.
|
/* Command line option handling.
|
||||||
Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
Contributed by Neil Booth.
|
Contributed by Neil Booth.
|
||||||
|
|
||||||
@ -971,24 +971,31 @@ decode_options (unsigned int argc, const char **argv)
|
|||||||
|
|
||||||
handle_options (argc, argv, lang_mask);
|
handle_options (argc, argv, lang_mask);
|
||||||
|
|
||||||
/* Make DUMP_BASE_NAME relative to the AUX_BASE_NAME directory,
|
if (dump_base_name && ! IS_ABSOLUTE_PATH (dump_base_name))
|
||||||
typically the directory to contain the object file. */
|
|
||||||
if (aux_base_name && ! IS_ABSOLUTE_PATH (dump_base_name))
|
|
||||||
{
|
{
|
||||||
const char *aux_base;
|
/* First try to make DUMP_BASE_NAME relative to the DUMP_DIR_NAME
|
||||||
|
directory. Then try to make DUMP_BASE_NAME relative to the
|
||||||
base_of_path (aux_base_name, &aux_base);
|
AUX_BASE_NAME directory, typically the directory to contain
|
||||||
if (aux_base_name != aux_base)
|
the object file. */
|
||||||
|
if (dump_dir_name)
|
||||||
|
dump_base_name = concat (dump_dir_name, dump_base_name, NULL);
|
||||||
|
else if (aux_base_name)
|
||||||
{
|
{
|
||||||
int dir_len = aux_base - aux_base_name;
|
const char *aux_base;
|
||||||
char *new_dump_base_name =
|
|
||||||
XNEWVEC (char, strlen(dump_base_name) + dir_len + 1);
|
|
||||||
|
|
||||||
/* Copy directory component from AUX_BASE_NAME. */
|
base_of_path (aux_base_name, &aux_base);
|
||||||
memcpy (new_dump_base_name, aux_base_name, dir_len);
|
if (aux_base_name != aux_base)
|
||||||
/* Append existing DUMP_BASE_NAME. */
|
{
|
||||||
strcpy (new_dump_base_name + dir_len, dump_base_name);
|
int dir_len = aux_base - aux_base_name;
|
||||||
dump_base_name = new_dump_base_name;
|
char *new_dump_base_name =
|
||||||
|
XNEWVEC (char, strlen(dump_base_name) + dir_len + 1);
|
||||||
|
|
||||||
|
/* Copy directory component from AUX_BASE_NAME. */
|
||||||
|
memcpy (new_dump_base_name, aux_base_name, dir_len);
|
||||||
|
/* Append existing DUMP_BASE_NAME. */
|
||||||
|
strcpy (new_dump_base_name + dir_len, dump_base_name);
|
||||||
|
dump_base_name = new_dump_base_name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1701,6 +1708,10 @@ common_handle_option (size_t scode, const char *arg, int value,
|
|||||||
dump_base_name = arg;
|
dump_base_name = arg;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case OPT_dumpdir:
|
||||||
|
dump_dir_name = arg;
|
||||||
|
break;
|
||||||
|
|
||||||
case OPT_falign_functions_:
|
case OPT_falign_functions_:
|
||||||
align_functions = value;
|
align_functions = value;
|
||||||
break;
|
break;
|
||||||
|
@ -152,6 +152,10 @@ struct line_maps *line_table;
|
|||||||
|
|
||||||
const char *dump_base_name;
|
const char *dump_base_name;
|
||||||
|
|
||||||
|
/* Directory used for dump output files. */
|
||||||
|
|
||||||
|
const char *dump_dir_name;
|
||||||
|
|
||||||
/* Name to use as a base for auxiliary output files. */
|
/* Name to use as a base for auxiliary output files. */
|
||||||
|
|
||||||
const char *aux_base_name;
|
const char *aux_base_name;
|
||||||
@ -1388,6 +1392,7 @@ print_switch_values (print_switch_fn_type print_fn)
|
|||||||
/* Ignore these. */
|
/* Ignore these. */
|
||||||
if (strcmp (*p, "-o") == 0
|
if (strcmp (*p, "-o") == 0
|
||||||
|| strcmp (*p, "-dumpbase") == 0
|
|| strcmp (*p, "-dumpbase") == 0
|
||||||
|
|| strcmp (*p, "-dumpdir") == 0
|
||||||
|| strcmp (*p, "-auxbase") == 0)
|
|| strcmp (*p, "-auxbase") == 0)
|
||||||
{
|
{
|
||||||
if (p[1] != NULL)
|
if (p[1] != NULL)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
/* toplev.h - Various declarations for functions found in toplev.c
|
/* toplev.h - Various declarations for functions found in toplev.c
|
||||||
Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008,
|
Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007,
|
||||||
2009 Free Software Foundation, Inc.
|
2008, 2009, 2010
|
||||||
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GCC.
|
This file is part of GCC.
|
||||||
|
|
||||||
@ -116,6 +117,7 @@ extern unsigned local_tick;
|
|||||||
|
|
||||||
extern const char *progname;
|
extern const char *progname;
|
||||||
extern const char *dump_base_name;
|
extern const char *dump_base_name;
|
||||||
|
extern const char *dump_dir_name;
|
||||||
extern const char *aux_base_name;
|
extern const char *aux_base_name;
|
||||||
extern const char *aux_info_file_name;
|
extern const char *aux_info_file_name;
|
||||||
extern const char *profile_data_prefix;
|
extern const char *profile_data_prefix;
|
||||||
|
Loading…
Reference in New Issue
Block a user