summaryrefslogtreecommitdiff
path: root/gold/readsyms.cc
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@google.com>2010-03-10 17:37:11 +0000
committerCary Coutant <ccoutant@google.com>2010-03-10 17:37:11 +0000
commita2a5469e7999a8e4e713e11bfd191c11a422e1e8 (patch)
tree92315f4087cfe181e318353ff45b1eb1409c3959 /gold/readsyms.cc
parent8861f32bfe734089329baf93a95f74ccc75dff44 (diff)
* fileread.cc (File_read::~File_read): Don't delete whole_file_view_.
(File_read::open[1]): Remove initial mapping of whole_file_view_. (File_read::open[2]): Add whole_file_view_ to list of views. (File_read::make_view): Remove test of whole_file_view_. (File_read::find_or_make_view): Create whole_file_view_ if necessary. (File_read::clear_views): Replace bool parameter with enum; adjust all callers. Don't delete views with permanent data; do delete cached views and views from archives if --no-keep-files-mapped is set. Set whole_file_view_ to NULL if clearing the corresponding view. * fileread.h (File_read::Clear_views_mode): New enum. (File_read::View::is_permanent_view): New method. (File_read::clear_views): Replace bool parameter with enum; adjust all callers. * options.h (General_options): Change keep_files_mapped option; add map_whole_files. * readsyms.cc (Add_symbols::run): Delete sd_ object before releasing the file. * reloc.cc (Scan_relocs::run): Delete rd_ object before releasing the file.
Diffstat (limited to 'gold/readsyms.cc')
-rw-r--r--gold/readsyms.cc6
1 files changed, 4 insertions, 2 deletions
diff --git a/gold/readsyms.cc b/gold/readsyms.cc
index cd8814c70f..2ca391cec6 100644
--- a/gold/readsyms.cc
+++ b/gold/readsyms.cc
@@ -470,6 +470,8 @@ Add_symbols::run(Workqueue*)
if (!this->input_objects_->add_object(this->object_))
{
+ delete this->sd_;
+ this->sd_ = NULL;
this->object_->release();
delete this->object_;
}
@@ -477,10 +479,10 @@ Add_symbols::run(Workqueue*)
{
this->object_->layout(this->symtab_, this->layout_, this->sd_);
this->object_->add_symbols(this->symtab_, this->sd_, this->layout_);
+ delete this->sd_;
+ this->sd_ = NULL;
this->object_->release();
}
- delete this->sd_;
- this->sd_ = NULL;
}
// Class Start_group.