* 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>
PR middle-end/44903

View File

@ -349,8 +349,8 @@ input_options (struct lto_input_block *ib)
void
lto_read_file_options (struct lto_file_decl_data *file_data)
{
size_t len;
const char *data;
size_t len, l, skip;
const char *data, *p;
const struct lto_simple_header *header;
int32_t opts_offset;
struct lto_input_block ib;
@ -358,14 +358,30 @@ lto_read_file_options (struct lto_file_decl_data *file_data)
data = lto_get_section_data (file_data, LTO_section_opts, NULL, &len);
if (!data)
return;
header = (const struct lto_simple_header *) data;
opts_offset = sizeof (*header);
lto_check_version (header->lto_header.major_version,
header->lto_header.minor_version);
/* 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);
LTO_INIT_INPUT_BLOCK (ib, data + opts_offset, 0, header->main_size);
input_options (&ib);
lto_check_version (header->lto_header.major_version,
header->lto_header.minor_version);
LTO_INIT_INPUT_BLOCK (ib, p + opts_offset, 0, header->main_size);
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);
}