On Sun, Mar 6, 2011 at 4:15 PM, H.J. Lu <hjl.to...@gmail.com> wrote: > On Sun, Mar 6, 2011 at 3:40 PM, H.J. Lu <hjl.to...@gmail.com> wrote: >> On Sun, Mar 6, 2011 at 3:23 PM, Richard Guenther >> <richard.guent...@gmail.com> wrote: >>> On Sun, Mar 6, 2011 at 10:28 PM, H.J. Lu <hjl.to...@gmail.com> wrote: >>>> On Sun, Mar 6, 2011 at 1:15 PM, Andrew Pinski <pins...@gmail.com> wrote: >>>>> On Sun, Mar 6, 2011 at 9:18 AM, H.J. Lu <hongjiu...@intel.com> wrote: >>>>>> Hi, >>>>>> >>>>>> 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? Thanks. -- H.J.