| 177 | } |
| 178 | |
| 179 | static inline bool isFrameComplete(instruction_t* entry, instruction_t* ip) { |
| 180 | // Frame is fully constructed after sp is decremented by the frame size. |
| 181 | // Check if there is such an instruction anywhere between |
| 182 | // the method entry and the current instruction pointer. |
| 183 | while (--ip >= entry) { |
| 184 | if ((*ip & 0xff8003ff) == 0xd10003ff) { // sub sp, sp, #frame_size |
| 185 | return true; |
| 186 | } |
| 187 | } |
| 188 | return false; |
| 189 | } |
| 190 | |
| 191 | bool StackFrame::unwindPrologue(NMethod* nm, uintptr_t& pc, uintptr_t& sp, uintptr_t& fp) { |
| 192 | // C1/C2 methods: |