aboutsummaryrefslogtreecommitdiff
path: root/gold/fileread.h
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/fileread.h
parent8861f32bfe734089329baf93a95f74ccc75dff44 (diff)
downloadfsf-binutils-gdb-a2a5469e7999a8e4e713e11bfd191c11a422e1e8.zip
fsf-binutils-gdb-a2a5469e7999a8e4e713e11bfd191c11a422e1e8.tar.gz
fsf-binutils-gdb-a2a5469e7999a8e4e713e11bfd191c11a422e1e8.tar.bz2
* 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/fileread.h')
-rw-r--r--gold/fileread.h21
1 files changed, 19 insertions, 2 deletions
diff --git a/gold/fileread.h b/gold/fileread.h
index 9933460..a81b5fe 100644
--- a/gold/fileread.h
+++ b/gold/fileread.h
@@ -170,7 +170,7 @@ class File_read
// interface, and it would be nice to have something more automatic.
void
clear_uncached_views()
- { this->clear_views(false); }
+ { this->clear_views(CLEAR_VIEWS_ARCHIVE); }
// A struct used to do a multiple read.
struct Read_multiple_entry
@@ -214,6 +214,17 @@ class File_read
get_mtime();
private:
+ // Control for what views to clear.
+ enum Clear_views_mode
+ {
+ // Clear uncached views not used by an archive.
+ CLEAR_VIEWS_NORMAL,
+ // Clear all uncached views (including in an archive).
+ CLEAR_VIEWS_ARCHIVE,
+ // Clear all views (i.e., we're destroying the file).
+ CLEAR_VIEWS_ALL
+ };
+
// This class may not be copied.
File_read(const File_read&);
File_read& operator=(const File_read&);
@@ -303,6 +314,12 @@ class File_read
accessed() const
{ return this->accessed_; }
+ // Returns TRUE if this view contains permanent data -- e.g., data that
+ // was supplied by the owner of the File object.
+ bool
+ is_permanent_view() const
+ { return this->data_ownership_ == DATA_NOT_OWNED; }
+
private:
View(const View&);
View& operator=(const View&);
@@ -366,7 +383,7 @@ class File_read
// Clear the file views.
void
- clear_views(bool);
+ clear_views(Clear_views_mode);
// The size of a file page for buffering data.
static const off_t page_size = 8192;