summaryrefslogtreecommitdiff
path: root/gold/gold.cc
diff options
context:
space:
mode:
authorDoug Kwan <dougkwan@google.com>2010-04-07 21:42:22 +0000
committerDoug Kwan <dougkwan@google.com>2010-04-07 21:42:22 +0000
commit7296d9338774c74e5a525f0c8f31c20f367997f5 (patch)
tree67b418679854fa1282c810a5ed529f3b56bedb4a /gold/gold.cc
parent45ecb02a77c46951cc295f519e2c36c4f999a047 (diff)
downloadbinutils-gdb-7296d9338774c74e5a525f0c8f31c20f367997f5.tar.gz
2010-04-07 Doug Kwan <dougkwan@google.com>
* arm.cc: Replace "endianity" with "endianness" in comments. (Arm_exidx_cantunwind): Ditto. (Arm_relobj::Arm_relobj): Initialize merge_flags_and_attribures. (Arm_relobj::merge_flags_and_attributes): New method. (Arm_relobj::merge_flags_and_attributes_): New data member. (Arm_exidx_cantunwind::do_fixed_endian_write): Fix formatting. (Arm_relobj::scan_sections_for_stubs): Ditto. (Arm_relobj::do_read_symbols): Check to see if we really want to merge processor-specific flags and attributes. Exit early if an object is empty except for section names and the undefined symbol. (Target_arm::do_finalize_sections): Move check for ELF format to Arm_relobj::do_read_symbols. Merge processor specific flags and attributes from a regular object only when we have determined that it is aapropriate. Do not create an .ARM.attributes section in output if there is no regular input object. (Target_arm::merge_processor_specific_flags): Check --warn-mismatch before printing any error. (Target_arm::merge_object_attributes): Ditto. * gold.cc (queue_middle_tasks): Handle the case in which there is no regular object in input. * options.cc (General_options::parse_EB): New method. (General_options::parse_EL): Same. (General_options::General_options): Initialize endianness_. * options.h (-EB, -EL, -no-pipeline-knowledge, -p, --warn-mismatch): New options. (General_options::Endianness): New enum. (General_options::endianness): New method. (General_options::endianness_): New data member. * parameters.cc (Parameters::set_options): Check target endianness. (Parameters::set_target_once): Ditto. (Parameters::check_target_endianness): New method. (parameters_force_valid_target): If either -EL or -EB is specified, use it to define endianness of default target. * parameters.h (Parameters::check_target_endianness): New method declaration. * target.h (class Target): Change "endianity" to "endianness" in comments.
Diffstat (limited to 'gold/gold.cc')
-rw-r--r--gold/gold.cc20
1 files changed, 15 insertions, 5 deletions
diff --git a/gold/gold.cc b/gold/gold.cc
index aa7689ff613..b5508aef47d 100644
--- a/gold/gold.cc
+++ b/gold/gold.cc
@@ -532,13 +532,23 @@ queue_middle_tasks(const General_options& options,
}
}
- // If we failed to open any input files, it's possible for
- // THIS_BLOCKER to be NULL here. There's no real point in
- // continuing if that happens.
if (this_blocker == NULL)
{
- gold_assert(parameters->errors()->error_count() > 0);
- gold_exit(false);
+ if (input_objects->number_of_relobjs() == 0)
+ {
+ // If we are given only archives in input, we have no regular
+ // objects and THIS_BLOCKER is NULL here. Create a dummy
+ // blocker here so that we can run the layout task immediately.
+ this_blocker = new Task_token(true);
+ }
+ else
+ {
+ // If we failed to open any input files, it's possible for
+ // THIS_BLOCKER to be NULL here. There's no real point in
+ // continuing if that happens.
+ gold_assert(parameters->errors()->error_count() > 0);
+ gold_exit(false);
+ }
}
// When all those tasks are complete, we can start laying out the