From Craig Silverstein: Don't crash if we see a file we don't recognize.
This commit is contained in:
parent
53c8095f60
commit
019cdb1a59
@ -399,12 +399,19 @@ Archive::include_member(Symbol_table* symtab, Layout* layout,
|
||||
this->input_file_, memoff, ehdr_buf,
|
||||
read_size);
|
||||
|
||||
input_objects->add_object(obj);
|
||||
if (input_objects->add_object(obj))
|
||||
{
|
||||
Read_symbols_data sd;
|
||||
obj->read_symbols(&sd);
|
||||
obj->layout(symtab, layout, &sd);
|
||||
obj->add_symbols(symtab, &sd);
|
||||
}
|
||||
else
|
||||
{
|
||||
// FIXME: We need to close the descriptor here.
|
||||
delete obj;
|
||||
}
|
||||
|
||||
Read_symbols_data sd;
|
||||
obj->read_symbols(&sd);
|
||||
obj->layout(symtab, layout, &sd);
|
||||
obj->add_symbols(symtab, &sd);
|
||||
}
|
||||
|
||||
// Add_archive_symbols methods.
|
||||
|
@ -866,6 +866,15 @@ Sized_relobj<size, big_endian>::get_symbol_location_info(
|
||||
bool
|
||||
Input_objects::add_object(Object* obj)
|
||||
{
|
||||
Target* target = obj->target();
|
||||
if (this->target_ == NULL)
|
||||
this->target_ = target;
|
||||
else if (this->target_ != target)
|
||||
{
|
||||
gold_error(_("%s: incompatible target"), obj->name().c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!obj->is_dynamic())
|
||||
this->relobj_list_.push_back(static_cast<Relobj*>(obj));
|
||||
else
|
||||
@ -884,15 +893,6 @@ Input_objects::add_object(Object* obj)
|
||||
this->dynobj_list_.push_back(dynobj);
|
||||
}
|
||||
|
||||
Target* target = obj->target();
|
||||
if (this->target_ == NULL)
|
||||
this->target_ = target;
|
||||
else if (this->target_ != target)
|
||||
{
|
||||
gold_error(_("%s: incompatible target"), obj->name().c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
set_parameters_size_and_endianness(target->get_size(),
|
||||
target->is_big_endian());
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user