Lines Matching refs:frame

73 	stack_frame frame;
75 && is_kernel_stack_address(thread, bp + sizeof(frame) - 1)) {
76 memcpy(&frame, (void*)bp, sizeof(frame));
78 || user_memcpy(&frame, (void*)bp, sizeof(frame)) != B_OK) {
82 *_ip = frame.return_address;
83 *_next = (addr_t)frame.previous;
94 stack_frame frame;
95 if (debug_memcpy(B_CURRENT_TEAM, &frame, (void*)bp, sizeof(frame)) != B_OK)
98 *_ip = frame.return_address;
99 *_next = (addr_t)frame.previous;
426 print_iframe(iframe* frame)
428 bool isUser = IFRAME_IS_USER(frame);
431 kprintf("%s iframe at %p (end = %p)\n", isUser ? "user" : "kernel", frame,
432 frame + 1);
434 kprintf(" rax %#-18lx rbx %#-18lx rcx %#lx\n", frame->ax,
435 frame->bx, frame->cx);
436 kprintf(" rdx %#-18lx rsi %#-18lx rdi %#lx\n", frame->dx,
437 frame->si, frame->di);
438 kprintf(" rbp %#-18lx r8 %#-18lx r9 %#lx\n", frame->bp,
439 frame->r8, frame->r9);
440 kprintf(" r10 %#-18lx r11 %#-18lx r12 %#lx\n", frame->r10,
441 frame->r11, frame->r12);
442 kprintf(" r13 %#-18lx r14 %#-18lx r15 %#lx\n", frame->r13,
443 frame->r14, frame->r15);
444 kprintf(" rip %#-18lx rsp %#-18lx rflags %#lx\n", frame->ip,
445 frame->sp, frame->flags);
447 kprintf("%s iframe at %p (end = %p)\n", isUser ? "user" : "kernel", frame,
448 isUser ? (void*)(frame + 1) : (void*)&frame->user_sp);
451 frame->ax, frame->bx, frame->cx, frame->dx);
453 frame->si, frame->di, frame->bp, frame->sp);
454 kprintf(" eip %#-10lx eflags %#-10lx", frame->ip, frame->flags);
457 kprintf("user esp %#lx", frame->user_sp);
462 kprintf(" vector: %#lx, error code: %#lx\n", frame->vector,
463 frame->error_code);
502 // Read frame pointer from the thread's stack.
550 is_iframe(Thread* thread, addr_t frame)
552 if (!is_kernel_stack_address(thread, frame))
555 addr_t previousFrame = *(addr_t*)frame;
562 find_previous_iframe(Thread* thread, addr_t frame)
565 while (is_kernel_stack_address(thread, frame)) {
566 if (is_iframe(thread, frame))
567 return (iframe*)frame;
569 frame = *(addr_t*)frame;
577 get_previous_iframe(Thread* thread, iframe* frame)
579 if (frame == NULL)
582 return find_previous_iframe(thread, frame->bp);
607 iframe* frame = get_current_iframe(debug_get_debugged_thread());
608 if (frame == NULL)
612 CHECK_DEBUG_VARIABLE("cs", frame->cs, false);
613 CHECK_DEBUG_VARIABLE("ss", frame->ss, false);
614 CHECK_DEBUG_VARIABLE("r15", frame->r15, true);
615 CHECK_DEBUG_VARIABLE("r14", frame->r14, true);
616 CHECK_DEBUG_VARIABLE("r13", frame->r13, true);
617 CHECK_DEBUG_VARIABLE("r12", frame->r12, true);
618 CHECK_DEBUG_VARIABLE("r11", frame->r11, true);
619 CHECK_DEBUG_VARIABLE("r10", frame->r10, true);
620 CHECK_DEBUG_VARIABLE("r9", frame->r9, true);
621 CHECK_DEBUG_VARIABLE("r8", frame->r8, true);
622 CHECK_DEBUG_VARIABLE("rbp", frame->bp, true);
623 CHECK_DEBUG_VARIABLE("rsi", frame->si, true);
624 CHECK_DEBUG_VARIABLE("rdi", frame->di, true);
625 CHECK_DEBUG_VARIABLE("rdx", frame->dx, true);
626 CHECK_DEBUG_VARIABLE("rcx", frame->cx, true);
627 CHECK_DEBUG_VARIABLE("rbx", frame->bx, true);
628 CHECK_DEBUG_VARIABLE("rax", frame->ax, true);
629 CHECK_DEBUG_VARIABLE("rip", frame->ip, true);
630 CHECK_DEBUG_VARIABLE("rflags", frame->flags, true);
631 CHECK_DEBUG_VARIABLE("rsp", frame->sp, true);
633 CHECK_DEBUG_VARIABLE("gs", frame->gs, false);
634 CHECK_DEBUG_VARIABLE("fs", frame->fs, false);
635 CHECK_DEBUG_VARIABLE("es", frame->es, false);
636 CHECK_DEBUG_VARIABLE("ds", frame->ds, false);
637 CHECK_DEBUG_VARIABLE("cs", frame->cs, false);
638 CHECK_DEBUG_VARIABLE("edi", frame->di, true);
639 CHECK_DEBUG_VARIABLE("esi", frame->si, true);
640 CHECK_DEBUG_VARIABLE("ebp", frame->bp, true);
641 CHECK_DEBUG_VARIABLE("esp", frame->sp, true);
642 CHECK_DEBUG_VARIABLE("ebx", frame->bx, true);
643 CHECK_DEBUG_VARIABLE("edx", frame->dx, true);
644 CHECK_DEBUG_VARIABLE("ecx", frame->cx, true);
645 CHECK_DEBUG_VARIABLE("eax", frame->ax, true);
646 CHECK_DEBUG_VARIABLE("orig_eax", frame->orig_eax, true);
647 CHECK_DEBUG_VARIABLE("orig_edx", frame->orig_edx, true);
648 CHECK_DEBUG_VARIABLE("eip", frame->ip, true);
649 CHECK_DEBUG_VARIABLE("eflags", frame->flags, true);
651 if (IFRAME_IS_USER(frame)) {
652 CHECK_DEBUG_VARIABLE("user_esp", frame->user_sp, true);
653 CHECK_DEBUG_VARIABLE("user_ss", frame->user_ss, false);
710 B_PRINTF_POINTER_WIDTH, "frame", B_PRINTF_POINTER_WIDTH, "caller");
719 iframe* frame = (iframe*)bp;
721 print_iframe(frame);
722 print_stack_frame(thread, frame->ip, bp, frame->bp, callIndex,
725 bp = frame->bp;
742 kprintf("circular stack frame: %p!\n", (void*)bp);
883 struct iframe *frame = (struct iframe *)ebp;
886 print_call(thread, frame->ip, ebp, frame->bp, argCount);
888 ebp = frame->bp;
956 iframe* frame = find_previous_iframe(thread, x86_get_stack_frame());
957 while (frame != NULL) {
958 print_iframe(frame);
959 frame = get_previous_iframe(thread, frame);
1049 // get the caller's frame pointer
1050 stack_frame* frame = (stack_frame*)x86_get_stack_frame();
1051 registers->bp = (addr_t)frame->previous;
1092 iframe* frame = (iframe*)bp;
1094 if (is_calling(thread, frame->ip, symbol, start, end))
1097 bp = frame->bp;
1155 iframe* frame = (iframe*)bp;
1156 ip = frame->ip;
1157 nextBp = frame->bp;
1188 is set to whether this interrupt frame was created by a syscall. Returns
1189 \c NULL, if there's no such frame or a problem occurred retrieving it;
1195 iframe* frame = get_current_iframe(debug_get_debugged_thread());
1196 if (frame == NULL)
1200 *_isSyscall = frame->type == IFRAME_TYPE_SYSCALL;
1202 return (void*)(addr_t)frame->ip;
1266 /*! Writes the contents of the CPU registers at some fixed outer stack frame or
1279 iframe* frame = get_current_iframe(debug_get_debugged_thread());
1280 if (frame == NULL)
1295 { B_UINT64_TYPE, frame->ax }, { B_UINT64_TYPE, frame->bx },
1296 { B_UINT64_TYPE, frame->cx }, { B_UINT64_TYPE, frame->dx },
1297 { B_UINT64_TYPE, frame->si }, { B_UINT64_TYPE, frame->di },
1298 { B_UINT64_TYPE, frame->bp }, { B_UINT64_TYPE, frame->sp },
1299 { B_UINT64_TYPE, frame->r8 }, { B_UINT64_TYPE, frame->r9 },
1300 { B_UINT64_TYPE, frame->r10 }, { B_UINT64_TYPE, frame->r11 },
1301 { B_UINT64_TYPE, frame->r12 }, { B_UINT64_TYPE, frame->r13 },
1302 { B_UINT64_TYPE, frame->r14 }, { B_UINT64_TYPE, frame->r15 },
1303 { B_UINT64_TYPE, frame->ip }, { B_UINT32_TYPE, frame->flags },
1304 { B_UINT32_TYPE, frame->cs }, { B_UINT32_TYPE, frame->ss },
1320 { B_UINT32_TYPE, frame->ax }, { B_UINT32_TYPE, frame->cx },
1321 { B_UINT32_TYPE, frame->dx }, { B_UINT32_TYPE, frame->bx },
1322 { B_UINT32_TYPE, frame->sp }, { B_UINT32_TYPE, frame->bp },
1323 { B_UINT32_TYPE, frame->si }, { B_UINT32_TYPE, frame->di },
1324 { B_UINT32_TYPE, frame->ip }, { B_UINT32_TYPE, frame->flags },
1325 { B_UINT32_TYPE, frame->cs }, { B_UINT32_TYPE, frame->ds },
1327 { B_UINT32_TYPE, frame->ds }, { B_UINT32_TYPE, frame->es },
1328 { B_UINT32_TYPE, frame->fs }, { B_UINT32_TYPE, frame->gs },