mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-24 12:23:31 +08:00
PR gold/12898
* layout.cc (Layout::segment_precedes): Don't crash if a linker script create indistinguishable segments. (Layout::set_segment_offsets): Use stable_sort when sorting segments. Pass this to Compare_segments constructor. * layout.h (class Layout): Make segment_precedes non-static. (class Compare_segments): Change from struct to class. Add layout_ field. Add constructor. * script-sections.cc (Script_sections::attach_sections_using_phdrs_clause): Rename local orphan to is_orphan. Don't report failure to put empty section in segment. On attachment failure, report name of section, and attach to first PT_LOAD segment.
This commit is contained in:
@ -1052,7 +1052,7 @@ class Layout
|
||||
place_orphan_sections_in_script();
|
||||
|
||||
// Return whether SEG1 comes before SEG2 in the output file.
|
||||
static bool
|
||||
bool
|
||||
segment_precedes(const Output_segment* seg1, const Output_segment* seg2);
|
||||
|
||||
// Use to save and restore segments during relaxation.
|
||||
@ -1102,11 +1102,19 @@ class Layout
|
||||
|
||||
// A comparison class for segments.
|
||||
|
||||
struct Compare_segments
|
||||
class Compare_segments
|
||||
{
|
||||
public:
|
||||
Compare_segments(Layout* layout)
|
||||
: layout_(layout)
|
||||
{ }
|
||||
|
||||
bool
|
||||
operator()(const Output_segment* seg1, const Output_segment* seg2)
|
||||
{ return Layout::segment_precedes(seg1, seg2); }
|
||||
{ return this->layout_->segment_precedes(seg1, seg2); }
|
||||
|
||||
private:
|
||||
Layout* layout_;
|
||||
};
|
||||
|
||||
typedef std::vector<Output_section_data*> Output_section_data_list;
|
||||
|
Reference in New Issue
Block a user