bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug gold/17005] [Gold] .ehframe problem with --sort-section=name


From: aivchenk at gmail dot com
Subject: [Bug gold/17005] [Gold] .ehframe problem with --sort-section=name
Date: Wed, 11 Jun 2014 12:59:53 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=17005

--- Comment #3 from Alexander Ivchenko <aivchenk at gmail dot com> ---
If we assume that we applied patch from Comment 2, the resulting binary would
still fails, because the .eh_frame_hdr offset table is calculated incorrectly.

In Fde::write:

  // Tell the exception frame header about this FDE.
  if (eh_frame_hdr != NULL)
    eh_frame_hdr->record_fde(offset, fde_encoding);

Here offset for all fde's is recorder from the beginning of the oview. However,
oview address could be different from the beginning of the output section (like
in our case).

I would just simply disable sorting eh_frame sections with something like:

diff --git a/gold/output.cc b/gold/output.cc
index c078fbb..5a9d591 100644
--- a/gold/output.cc
+++ b/gold/output.cc
@@ -3626,7 +3626,8 @@ Output_section::sort_attached_input_sections()
          || this->type() == elfcpp::SHT_FINI_ARRAY)
        std::sort(sort_list.begin(), sort_list.end(),
                  Input_section_sort_init_fini_compare());
-      else if (strcmp(parameters->options().sort_section(), "name") == 0)
+      else if (strcmp(parameters->options().sort_section(), "name") == 0
+              && strcmp(this->name(), ".eh_frame") != 0)
        std::sort(sort_list.begin(), sort_list.end(),
                  Input_section_sort_section_name_compare());
       else if (strcmp(this->name(), ".text") == 0)

-- 
You are receiving this mail because:
You are on the CC list for the bug.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]