PR gold/12675
authorIan Lance Taylor <ian@airs.com>
Wed, 29 Jun 2011 21:39:19 +0000 (21:39 +0000)
committerIan Lance Taylor <ian@airs.com>
Wed, 29 Jun 2011 21:39:19 +0000 (21:39 +0000)
* object.cc (Sized_relobj_file::check_eh_frame_flags): Check for
SHT_X86_64_UNWIND.
* layout.cc (Layout::layout_eh_frame): Likewise.

gold/ChangeLog
gold/layout.cc
gold/object.cc

index bfb9a4087645867358b9d2b6b008ea188dfe0687..342fc1981c4819fc841b0fa50a6e5b41733f63f4 100644 (file)
@@ -1,3 +1,10 @@
+2011-06-29  Ian Lance Taylor  <iant@google.com>
+
+       PR gold/12675
+       * object.cc (Sized_relobj_file::check_eh_frame_flags): Check for
+       SHT_X86_64_UNWIND.
+       * layout.cc (Layout::layout_eh_frame): Likewise.
+
 2011-06-29  Ian Lance Taylor  <iant@google.com>
 
        PR gold/12695
index a52d35c7b2d315d72d4f475334ee78cfd4ffa4e0..3152622fb13fc451ec0e0ebcb67c2033702bff2a 100644 (file)
@@ -1132,7 +1132,8 @@ Layout::layout_eh_frame(Sized_relobj_file<size, big_endian>* object,
                        unsigned int reloc_shndx, unsigned int reloc_type,
                        off_t* off)
 {
-  gold_assert(shdr.get_sh_type() == elfcpp::SHT_PROGBITS);
+  gold_assert(shdr.get_sh_type() == elfcpp::SHT_PROGBITS
+             || shdr.get_sh_type() == elfcpp::SHT_X86_64_UNWIND);
   gold_assert((shdr.get_sh_flags() & elfcpp::SHF_ALLOC) != 0);
 
   const char* const name = ".eh_frame";
index 778f03be8e256491e726ef9ace63beb1575a3572..322f56edf2aba9e8b0823cb4366c54a142229745 100644 (file)
@@ -511,7 +511,9 @@ bool
 Sized_relobj_file<size, big_endian>::check_eh_frame_flags(
     const elfcpp::Shdr<size, big_endian>* shdr) const
 {
-  return (shdr->get_sh_type() == elfcpp::SHT_PROGBITS
+  elfcpp::Elf_Word sh_type = shdr->get_sh_type();
+  return ((sh_type == elfcpp::SHT_PROGBITS
+          || sh_type == elfcpp::SHT_X86_64_UNWIND)
          && (shdr->get_sh_flags() & elfcpp::SHF_ALLOC) != 0);
 }