From Craig Silverstein: Don't crash if we see a file we don't recognize.

This commit is contained in:
Ian Lance Taylor 2007-11-07 00:31:32 +00:00
parent 53c8095f60
commit 019cdb1a59
2 changed files with 21 additions and 14 deletions

View File

@ -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.

View File

@ -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());