diff options
author | Doug Kwan <dougkwan@google.com> | 2010-02-24 20:50:59 +0000 |
---|---|---|
committer | Doug Kwan <dougkwan@google.com> | 2010-02-24 20:50:59 +0000 |
commit | 101654612f383f5427e2d727556eda80537de76b (patch) | |
tree | b57e25c9d904f79e0cd79d05af1fdc32f1be34b9 | |
parent | 24291992dac3f63bef7ee031d4d5f2f96920e070 (diff) | |
download | gdb-101654612f383f5427e2d727556eda80537de76b.zip gdb-101654612f383f5427e2d727556eda80537de76b.tar.gz gdb-101654612f383f5427e2d727556eda80537de76b.tar.bz2 |
2010-02-24 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::do_finalize_sections): Skip processor specific
flags and attributes merging if an input file is a binary file.
* fileread.cc (Input_file::open): Record format of original file.
* fileread.h (Input_file::Format): New enum type.
(Input_file::Input_file): Initialize data member format_.
(Input_file::format): New method definition.
(Input_file::format_):: New data member.
-rw-r--r-- | gold/ChangeLog | 10 | ||||
-rw-r--r-- | gold/arm.cc | 9 | ||||
-rw-r--r-- | gold/fileread.cc | 7 | ||||
-rw-r--r-- | gold/fileread.h | 16 |
4 files changed, 40 insertions, 2 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index a7bf299..92f8344 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,5 +1,15 @@ 2010-02-24 Doug Kwan <dougkwan@google.com> + * arm.cc (Target_arm::do_finalize_sections): Skip processor specific + flags and attributes merging if an input file is a binary file. + * fileread.cc (Input_file::open): Record format of original file. + * fileread.h (Input_file::Format): New enum type. + (Input_file::Input_file): Initialize data member format_. + (Input_file::format): New method definition. + (Input_file::format_):: New data member. + +2010-02-24 Doug Kwan <dougkwan@google.com> + * arm.cc (Arm_output_data_got): New class. (ARM_TCB_SIZE): New constant (Target_arm): Use Arm_output_data_got instead of Output_data_got. diff --git a/gold/arm.cc b/gold/arm.cc index ca34023..497072a 100644 --- a/gold/arm.cc +++ b/gold/arm.cc @@ -7922,6 +7922,15 @@ Target_arm<big_endian>::do_finalize_sections( p != input_objects->relobj_end(); ++p) { + // If this input file is a binary file, it has no processor + // specific flags and attributes section. + Input_file::Format format = (*p)->input_file()->format(); + if (format != Input_file::FORMAT_ELF) + { + gold_assert(format == Input_file::FORMAT_BINARY); + continue; + } + Arm_relobj<big_endian>* arm_relobj = Arm_relobj<big_endian>::as_arm_relobj(*p); this->merge_processor_specific_flags( diff --git a/gold/fileread.cc b/gold/fileread.cc index 4e8157f..9f19099 100644 --- a/gold/fileread.cc +++ b/gold/fileread.cc @@ -938,17 +938,22 @@ Input_file::open(const Dirsearch& dirpath, const Task* task, int *pindex) this->input_argument_->options().format_enum(); bool ok; if (format == General_options::OBJECT_FORMAT_ELF) - ok = this->file_.open(task, name); + { + ok = this->file_.open(task, name); + this->format_ = FORMAT_ELF; + } else { gold_assert(format == General_options::OBJECT_FORMAT_BINARY); ok = this->open_binary(task, name); + this->format_ = FORMAT_BINARY; } if (!ok) { gold_error(_("cannot open %s: %s"), name.c_str(), strerror(errno)); + this->format_ = FORMAT_NONE; return false; } diff --git a/gold/fileread.h b/gold/fileread.h index 5aac7ad..9933460 100644 --- a/gold/fileread.h +++ b/gold/fileread.h @@ -464,9 +464,16 @@ class File_view class Input_file { public: + enum Format + { + FORMAT_NONE, + FORMAT_ELF, + FORMAT_BINARY + }; + Input_file(const Input_file_argument* input_argument) : input_argument_(input_argument), found_name_(), file_(), - is_in_sysroot_(false) + is_in_sysroot_(false), format_(FORMAT_NONE) { } // Create an input file with the contents already provided. This is @@ -536,6 +543,11 @@ class Input_file bool just_symbols() const; + // Return the format of the unconverted input file. + Format + format() const + { return this->format_; } + private: Input_file(const Input_file&); Input_file& operator=(const Input_file&); @@ -555,6 +567,8 @@ class Input_file File_read file_; // Whether we found the file in a directory in the system root. bool is_in_sysroot_; + // Format of unconverted input file. + Format format_; }; } // end namespace gold |