lto-plugin.c (write_resolution): Assume resolution_file is set.
2009-11-12 Rafael Avila de Espindola <espindola@google.com> * lto-plugin.c (write_resolution): Assume resolution_file is set. Print the symbol name. (all_symbols_read_handler): Create a resolution file. Pass it to gcc. (cleanup_handler): Remove the resolution file. (process_option): Drop the -resolution option. 2009-11-12 Rafael Avila de Espindola <espindola@google.com> * lang.opt (fresolution): Renamed from resolution. * lto-lang.c (lto_handle_option): Handle new option name. * lto.c (lto_resolution_read): Add more checks. Discard rest of line. From-SVN: r154118
This commit is contained in:
parent
7248efd98d
commit
06bd7f563b
@ -1,3 +1,9 @@
|
||||
2009-11-12 Rafael Avila de Espindola <espindola@google.com>
|
||||
|
||||
* lang.opt (fresolution): Renamed from resolution.
|
||||
* lto-lang.c (lto_handle_option): Handle new option name.
|
||||
* lto.c (lto_resolution_read): Add more checks. Discard rest of line.
|
||||
|
||||
2009-11-04 Richard Guenther <rguenther@suse.de>
|
||||
Rafael Avila de Espindola <espindola@google.com>
|
||||
|
||||
|
@ -36,7 +36,7 @@ fwpa
|
||||
LTO Report Var(flag_wpa) Optimization
|
||||
Run the link-time optimizer in whole program analysis (WPA) mode.
|
||||
|
||||
resolution
|
||||
fresolution
|
||||
LTO Separate
|
||||
The resolution file
|
||||
|
||||
|
@ -622,7 +622,7 @@ lto_handle_option (size_t scode, const char *arg, int value ATTRIBUTE_UNUSED)
|
||||
|
||||
switch (code)
|
||||
{
|
||||
case OPT_resolution:
|
||||
case OPT_fresolution:
|
||||
resolution_file_name = arg;
|
||||
result = 1;
|
||||
break;
|
||||
|
@ -284,6 +284,7 @@ lto_resolution_read (FILE *resolution, const char *file_name)
|
||||
|
||||
for (i = 0; i < num_symbols; i++)
|
||||
{
|
||||
int t;
|
||||
unsigned index;
|
||||
char r_str[27];
|
||||
enum ld_plugin_symbol_resolution r;
|
||||
@ -291,7 +292,9 @@ lto_resolution_read (FILE *resolution, const char *file_name)
|
||||
unsigned int lto_resolution_str_len =
|
||||
sizeof (lto_resolution_str) / sizeof (char *);
|
||||
|
||||
fscanf (resolution, "%u %26s", &index, r_str);
|
||||
t = fscanf (resolution, "%u %26s %*[^\n]\n", &index, r_str);
|
||||
if (t != 2)
|
||||
internal_error ("Invalid line in the resolution file.");
|
||||
if (index > max_index)
|
||||
max_index = index;
|
||||
|
||||
@ -303,9 +306,8 @@ lto_resolution_read (FILE *resolution, const char *file_name)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (j >= lto_resolution_str_len)
|
||||
internal_error ("tried to read past the end of the linker resolution "
|
||||
"file");
|
||||
if (j == lto_resolution_str_len)
|
||||
internal_error ("Invalid resolution in the resolution file.");
|
||||
|
||||
VEC_safe_grow_cleared (ld_plugin_symbol_resolution_t, heap, ret,
|
||||
index + 1);
|
||||
|
@ -1,3 +1,12 @@
|
||||
2009-11-12 Rafael Avila de Espindola <espindola@google.com>
|
||||
|
||||
* lto-plugin.c (write_resolution): Assume resolution_file is set.
|
||||
Print the symbol name.
|
||||
(all_symbols_read_handler): Create a resolution file.
|
||||
Pass it to gcc.
|
||||
(cleanup_handler): Remove the resolution file.
|
||||
(process_option): Drop the -resolution option.
|
||||
|
||||
2009-11-05 Rafael Avila de Espindola <espindola@google.com>
|
||||
|
||||
* lto-plugin.c (temp_obj_dir_name): Remove.
|
||||
|
@ -310,9 +310,6 @@ write_resolution (void)
|
||||
unsigned int i;
|
||||
FILE *f;
|
||||
|
||||
if (!resolution_file)
|
||||
return;
|
||||
|
||||
f = fopen (resolution_file, "w");
|
||||
check (f, LDPL_FATAL, "could not open file");
|
||||
|
||||
@ -334,7 +331,7 @@ write_resolution (void)
|
||||
{
|
||||
uint32_t slot = symtab->slots[j];
|
||||
unsigned int resolution = syms[j].resolution;
|
||||
fprintf (f, "%d %s\n", slot, lto_resolution_str[resolution]);
|
||||
fprintf (f, "%d %s %s\n", slot, lto_resolution_str[resolution], syms[j].name);
|
||||
}
|
||||
}
|
||||
fclose (f);
|
||||
@ -452,7 +449,7 @@ static enum ld_plugin_status
|
||||
all_symbols_read_handler (void)
|
||||
{
|
||||
unsigned i;
|
||||
unsigned num_lto_args = num_claimed_files + lto_wrapper_num_args + 1;
|
||||
unsigned num_lto_args = num_claimed_files + lto_wrapper_num_args + 2 + 1;
|
||||
char **lto_argv;
|
||||
const char **lto_arg_ptr;
|
||||
if (num_claimed_files == 0)
|
||||
@ -468,6 +465,8 @@ all_symbols_read_handler (void)
|
||||
lto_arg_ptr = (const char **) lto_argv;
|
||||
assert (lto_wrapper_argv);
|
||||
|
||||
resolution_file = make_temp_file ("");
|
||||
|
||||
write_resolution ();
|
||||
|
||||
free_1 ();
|
||||
@ -475,6 +474,9 @@ all_symbols_read_handler (void)
|
||||
for (i = 0; i < lto_wrapper_num_args; i++)
|
||||
*lto_arg_ptr++ = lto_wrapper_argv[i];
|
||||
|
||||
*lto_arg_ptr++ = "-fresolution";
|
||||
*lto_arg_ptr++ = resolution_file;
|
||||
|
||||
for (i = 0; i < num_claimed_files; i++)
|
||||
{
|
||||
struct plugin_file_info *info = &claimed_files[i];
|
||||
@ -522,6 +524,12 @@ cleanup_handler (void)
|
||||
check (t == 0, LDPL_FATAL, "could not unlink arguments file");
|
||||
}
|
||||
|
||||
if (resolution_file)
|
||||
{
|
||||
t = unlink (resolution_file);
|
||||
check (t == 0, LDPL_FATAL, "could not unlink resolution file");
|
||||
}
|
||||
|
||||
free_2 ();
|
||||
return LDPS_OK;
|
||||
}
|
||||
@ -613,10 +621,6 @@ process_option (const char *option)
|
||||
debug = 1;
|
||||
else if (strcmp (option, "-nop") == 0)
|
||||
nop = 1;
|
||||
else if (!strncmp (option, "-resolution=", strlen("-resolution=")))
|
||||
{
|
||||
resolution_file = strdup (option + strlen("-resolution="));
|
||||
}
|
||||
else if (!strncmp (option, "-pass-through=", strlen("-pass-through=")))
|
||||
{
|
||||
num_pass_through_items++;
|
||||
|
Loading…
x
Reference in New Issue
Block a user