aboutsummaryrefslogtreecommitdiff
path: root/gold
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@gmail.com>2016-11-21 14:05:40 -0800
committerCary Coutant <ccoutant@gmail.com>2016-11-21 14:06:15 -0800
commitc13b08dbbcf752480a7621aa1f89bc5440c74c25 (patch)
tree728725027481b9a817f997588ce5d615a34bc601 /gold
parentd0de53e251ce60057d91536a4c71740b047be040 (diff)
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.
Diffstat (limited to 'gold')
-rw-r--r--gold/ChangeLog5
-rw-r--r--gold/gold.cc16
2 files changed, 13 insertions, 8 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index bb035f38f8..63476cda47 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -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).
diff --git a/gold/gold.cc b/gold/gold.cc
index 123d79bc17..7b3414f5f9 100644
--- a/gold/gold.cc
+++ b/gold/gold.cc
@@ -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());