1099 if ((old_sp & sp_align_mask) != 0) return true; |
1099 if ((old_sp & sp_align_mask) != 0) return true; |
1100 if (old_sp == 0 || old_sp == (uintptr_t)-1) return true; |
1100 if (old_sp == 0 || old_sp == (uintptr_t)-1) return true; |
1101 |
1101 |
1102 uintptr_t old_fp = (uintptr_t)fr->link(); |
1102 uintptr_t old_fp = (uintptr_t)fr->link(); |
1103 if ((old_fp & fp_align_mask) != 0) return true; |
1103 if ((old_fp & fp_align_mask) != 0) return true; |
1104 if (old_fp == 0 || old_fp == (uintptr_t)-1 || old_fp == ufp) return true; |
1104 // The check for old_fp and ufp is harmful on MIPS due to its special ABI. |
|
1105 if (old_fp == 0 || old_fp == (uintptr_t)-1 NOT_MIPS64(|| old_fp == ufp)) return true; |
1105 |
1106 |
1106 // stack grows downwards; if old_fp is below current fp or if the stack |
1107 // stack grows downwards; if old_fp is below current fp or if the stack |
1107 // frame is too large, either the stack is corrupted or fp is not saved |
1108 // frame is too large, either the stack is corrupted or fp is not saved |
1108 // on stack (i.e. on x86, ebp may be used as general register). The stack |
1109 // on stack (i.e. on x86, ebp may be used as general register). The stack |
1109 // is not walkable beyond current frame. |
1110 // is not walkable beyond current frame. |