* lto-opts.c (lto_file_read_options): Add loop over all inputs.

From-SVN: r162633
This commit is contained in:
Andi Kleen 2010-07-28 14:30:45 +00:00 committed by Andi Kleen
parent d720b8692c
commit c71eb2b76c
2 changed files with 28 additions and 8 deletions

View File

@ -1,3 +1,7 @@
2010-07-28 Andi Kleen <ak@linux.intel.com>
* lto-opts.c (lto_file_read_options): Add loop over all inputs.
2010-07-28 Richard Guenther <rguenther@suse.de> 2010-07-28 Richard Guenther <rguenther@suse.de>
PR middle-end/44903 PR middle-end/44903

View File

@ -349,8 +349,8 @@ input_options (struct lto_input_block *ib)
void void
lto_read_file_options (struct lto_file_decl_data *file_data) lto_read_file_options (struct lto_file_decl_data *file_data)
{ {
size_t len; size_t len, l, skip;
const char *data; const char *data, *p;
const struct lto_simple_header *header; const struct lto_simple_header *header;
int32_t opts_offset; int32_t opts_offset;
struct lto_input_block ib; struct lto_input_block ib;
@ -358,15 +358,31 @@ lto_read_file_options (struct lto_file_decl_data *file_data)
data = lto_get_section_data (file_data, LTO_section_opts, NULL, &len); data = lto_get_section_data (file_data, LTO_section_opts, NULL, &len);
if (!data) if (!data)
return; return;
header = (const struct lto_simple_header *) data;
/* Option could be multiple sections merged (through ld -r)
Keep reading all options. This is ok right now because
the options just get mashed together anyways.
This will have to be done differently once lto-opts knows
how to associate options with different files. */
l = len;
p = data;
do
{
header = (const struct lto_simple_header *) p;
opts_offset = sizeof (*header); opts_offset = sizeof (*header);
lto_check_version (header->lto_header.major_version, lto_check_version (header->lto_header.major_version,
header->lto_header.minor_version); header->lto_header.minor_version);
LTO_INIT_INPUT_BLOCK (ib, data + opts_offset, 0, header->main_size); LTO_INIT_INPUT_BLOCK (ib, p + opts_offset, 0, header->main_size);
input_options (&ib); input_options (&ib);
skip = header->main_size + opts_offset;
l -= skip;
p += skip;
}
while (l > 0);
lto_free_section_data (file_data, LTO_section_opts, 0, data, len); lto_free_section_data (file_data, LTO_section_opts, 0, data, len);
} }