On Mon, Mar 14, 2011 at 10:49 AM, H.J. Lu <hjl.to...@gmail.com> wrote: >>>>>>> >>>>>>> We shouldn't save call frame hard registers as "void *". This patch >>>>>>> changes the unwind library to save call frame hard registers as >>>>>>> _Unwind_Word. OK for 4.7? >>>>>> >>>>>> I think this will break the ABI for the MIPS N32 ABI. Not to mention >>>>>> the MIPS N32 ABI works fine with the unwinding part this way. Does >>>>>> someone use the unwinding library to look at the registers in previous >>>>>> stack frames? >>>>> >>>>> It may be psABI/implementation specific. X32 glibc force unwind calls >>>>> _Unwind_SetGRValue to get a 64bit register value. >>>> >>>> So fix it on that side? >>>> >>> >>> How? One function in question is >>> >>> /* Overwrite the saved value for register INDEX in CONTEXT with VAL. */ >>> >>> static inline void >>> _Unwind_SetGRValue (struct _Unwind_Context *context, int index, >>> _Unwind_Word val) >>> >>> >>> Are you saying it shouldn't be called if UNITS_PER_WORD > sizeof (void *)? >>> >> >> FWIW, the type of GR is _Unwind_Word, not void *. They may not >> have the same size. Why does the DWARF unwind library use >> void * to store GR? Can a target have an option to save a _Unwind_Word >> value in _Unwind_Word, instead of void *? >> > > From what I can tell, _Unwind_Context is internal to the unwind library > and only one copy unwind library can be used in a process. I don't > think changing _Unwind_Context will impact binary compatibility. > > Is my patch OK for 4.7? >
PING: http://gcc.gnu.org/ml/gcc-patches/2011-03/msg00267.html -- H.J.