aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gold/ChangeLog7
-rw-r--r--gold/layout.cc3
-rw-r--r--gold/object.cc4
3 files changed, 12 insertions, 2 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index bfb9a40..342fc19 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,5 +1,12 @@
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
* layout.cc (Layout::symtab_section_shndx): New function.
* layout.h (class Layout): Declare symtab_section_shndx.
diff --git a/gold/layout.cc b/gold/layout.cc
index a52d35c..3152622 100644
--- a/gold/layout.cc
+++ b/gold/layout.cc
@@ -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";
diff --git a/gold/object.cc b/gold/object.cc
index 778f03b..322f56e 100644
--- a/gold/object.cc
+++ b/gold/object.cc
@@ -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);
}