Fix bug where -u option with empty archive results in internal error.

gold/
	PR gold/20693
	* gold.cc (queue_middle_tasks): Force valid target earlier.
This commit is contained in:
Cary Coutant 2016-11-21 14:05:40 -08:00
parent d0de53e251
commit c13b08dbbc
2 changed files with 13 additions and 8 deletions

View File

@ -1,3 +1,8 @@
2016-11-21 Cary Coutant <ccoutant@gmail.com>
PR gold/20693
* gold.cc (queue_middle_tasks): Force valid target earlier.
2016-11-21 Igor Kudrin <ikudrin@accesssoftek.com>
* layout.cc: Include windows.h and rpcdce.h (for MinGW32).

View File

@ -492,6 +492,14 @@ queue_middle_tasks(const General_options& options,
if (timer != NULL)
timer->stamp(0);
// We have to support the case of not seeing any input objects, and
// generate an empty file. Existing builds depend on being able to
// pass an empty archive to the linker and get an empty object file
// out. In order to do this we need to use a default target.
if (input_objects->number_of_input_objects() == 0
&& layout->incremental_base() == NULL)
parameters_force_valid_target();
// Add any symbols named with -u options to the symbol table.
symtab->add_undefined_symbols_from_command_line(layout);
@ -589,14 +597,6 @@ queue_middle_tasks(const General_options& options,
}
}
// We have to support the case of not seeing any input objects, and
// generate an empty file. Existing builds depend on being able to
// pass an empty archive to the linker and get an empty object file
// out. In order to do this we need to use a default target.
if (input_objects->number_of_input_objects() == 0
&& layout->incremental_base() == NULL)
parameters_force_valid_target();
int thread_count = options.thread_count_middle();
if (thread_count == 0)
thread_count = std::max(2, input_objects->number_of_input_objects());