diff options
-rw-r--r-- | gold/ChangeLog | 7 | ||||
-rw-r--r-- | gold/layout.cc | 3 | ||||
-rw-r--r-- | gold/object.cc | 4 |
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); } |