--- zzzz-none-000/linux-2.6.19.2/include/asm-i386/unwind.h 2007-01-10 19:10:37.000000000 +0000 +++ davinci-8020-5505/linux-2.6.19.2/include/asm-i386/unwind.h 2007-01-19 14:42:56.000000000 +0000 @@ -52,7 +52,7 @@ static inline void arch_unw_init_frame_info(struct unwind_frame_info *info, /*const*/ struct pt_regs *regs) { - if (user_mode_vm(regs)) + if (user_mode(regs)) info->regs = *regs; else { memcpy(&info->regs, regs, offsetof(struct pt_regs, esp)); @@ -69,8 +69,8 @@ __get_user(info->regs.ebp, (long *)info->task->thread.esp); info->regs.esp = info->task->thread.esp; info->regs.xss = __KERNEL_DS; - info->regs.xds = __USER_DS; - info->regs.xes = __USER_DS; + info->regs.xds = __KERNEL_DS; + info->regs.xes = __KERNEL_DS; } extern asmlinkage int arch_unwind_init_running(struct unwind_frame_info *, @@ -82,9 +82,9 @@ { #if 0 /* This can only work when selector register and EFLAGS saves/restores are properly annotated (and tracked in UNW_REGISTER_INFO). */ - return user_mode_vm(&info->regs); + return user_mode(&info->regs); #else - return info->regs.eip < PAGE_OFFSET + return (info->regs.eip < PAGE_OFFSET && (info->regs.xcs & 0xFFFF) != __KERNEL_CS) || (info->regs.eip >= __fix_to_virt(FIX_VDSO) && info->regs.eip < __fix_to_virt(FIX_VDSO) + PAGE_SIZE) || info->regs.esp < PAGE_OFFSET;