Hi,

I am working on 32bit Pmode for x32:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50797

It removes all LEAs, which convert 32bit address to 64bit, and uses 0x67
address prefix instead.  I got 5% speed up in SPEC CPU 2K/2006.

But assert in _Unwind_SetGRValue:

gcc_assert (dwarf_reg_size_table[index] == sizeof (_Unwind_Context_Reg_Val));

failed on return column since init_return_column_size use Pmode, not
word_mode.  In this case, _Unwind_Context_Reg_Val is 64bit, but return
column size is 32bit.  This patch changes it to assert DWARF register
size <= saved reg size.  OK for trunk?

Thanks.


H.J.
---
2011-11-11  H.J. Lu  <hongjiu...@intel.com>

        * unwind-dw2.c (_Unwind_SetGRValue): Assert DWARF register size
        <= saved reg size.

diff --git a/libgcc/unwind-dw2.c b/libgcc/unwind-dw2.c
index 475ad00..db1c757 100644
--- a/libgcc/unwind-dw2.c
+++ b/libgcc/unwind-dw2.c
@@ -294,7 +294,8 @@ _Unwind_SetGRValue (struct _Unwind_Context *context, int 
index,
 {
   index = DWARF_REG_TO_UNWIND_COLUMN (index);
   gcc_assert (index < (int) sizeof(dwarf_reg_size_table));
-  gcc_assert (dwarf_reg_size_table[index] == sizeof (_Unwind_Context_Reg_Val));
+  /* Return column size may be smaller than _Unwind_Context_Reg_Va.  */ 
+  gcc_assert (dwarf_reg_size_table[index] <= sizeof (_Unwind_Context_Reg_Val));
 
   context->by_value[index] = 1;
   context->reg[index] = _Unwind_Get_Unwind_Context_Reg_Val (val);

Reply via email to