mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-26 15:31:35 +00:00
hv: cpu: using struct cpu_gp_regs for general-purpose regs in inter_excp_ctx
The purpos is to unify the layout of general-purpose regs in interrupt/excpetion context. Signed-off-by: Binbin Wu <binbin.wu@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
parent
586b527e2c
commit
f1b9f5ac97
@ -265,42 +265,45 @@ vector =0x20
|
|||||||
*/
|
*/
|
||||||
.align 8
|
.align 8
|
||||||
excp_save_frame:
|
excp_save_frame:
|
||||||
pushq %r11
|
pushq %r15
|
||||||
pushq %r10
|
pushq %r14
|
||||||
pushq %r9
|
pushq %r13
|
||||||
pushq %r8
|
pushq %r12
|
||||||
pushq %rdi
|
pushq %r11
|
||||||
pushq %rsi
|
pushq %r10
|
||||||
pushq %rdx
|
pushq %r9
|
||||||
pushq %rcx
|
pushq %r8
|
||||||
pushq %rax
|
pushq %rdi
|
||||||
pushq %rbp
|
pushq %rsi
|
||||||
pushq %rbx
|
pushq %rbp
|
||||||
pushq %r15
|
pushq %rsp
|
||||||
pushq %r14
|
pushq %rbx
|
||||||
pushq %r13
|
pushq %rdx
|
||||||
pushq %r12
|
pushq %rcx
|
||||||
|
pushq %rax
|
||||||
|
|
||||||
|
|
||||||
/* Put current stack pointer into 1st param register (rdi) */
|
/* Put current stack pointer into 1st param register (rdi) */
|
||||||
movq %rsp, %rdi
|
movq %rsp, %rdi
|
||||||
|
|
||||||
call dispatch_exception
|
call dispatch_exception
|
||||||
|
|
||||||
popq %r12
|
|
||||||
popq %r13
|
|
||||||
popq %r14
|
|
||||||
popq %r15
|
|
||||||
popq %rbx
|
|
||||||
popq %rbp
|
|
||||||
popq %rax
|
popq %rax
|
||||||
popq %rcx
|
popq %rcx
|
||||||
popq %rdx
|
popq %rdx
|
||||||
|
popq %rbx
|
||||||
|
popq %rsp
|
||||||
|
popq %rbp
|
||||||
popq %rsi
|
popq %rsi
|
||||||
popq %rdi
|
popq %rdi
|
||||||
popq %r8
|
popq %r8
|
||||||
popq %r9
|
popq %r9
|
||||||
popq %r10
|
popq %r10
|
||||||
popq %r11
|
popq %r11
|
||||||
|
popq %r12
|
||||||
|
popq %r13
|
||||||
|
popq %r14
|
||||||
|
popq %r15
|
||||||
|
|
||||||
/* Skip vector and error code*/
|
/* Skip vector and error code*/
|
||||||
add $16, %rsp
|
add $16, %rsp
|
||||||
@ -315,45 +318,44 @@ excp_save_frame:
|
|||||||
*/
|
*/
|
||||||
.align 8
|
.align 8
|
||||||
excp_rsvd:
|
excp_rsvd:
|
||||||
pushq %r11
|
pushq %r15
|
||||||
pushq %r10
|
pushq %r14
|
||||||
pushq %r9
|
pushq %r13
|
||||||
pushq %r8
|
pushq %r12
|
||||||
pushq %rdi
|
pushq %r11
|
||||||
pushq %rsi
|
pushq %r10
|
||||||
pushq %rdx
|
pushq %r9
|
||||||
pushq %rcx
|
pushq %r8
|
||||||
pushq %rax
|
pushq %rdi
|
||||||
|
pushq %rsi
|
||||||
|
pushq %rbp
|
||||||
pushq %rbp
|
pushq %rsp
|
||||||
pushq %rbx
|
pushq %rbx
|
||||||
pushq %r15
|
pushq %rdx
|
||||||
pushq %r14
|
pushq %rcx
|
||||||
pushq %r13
|
pushq %rax
|
||||||
pushq %r12
|
|
||||||
|
|
||||||
/* Put current stack pointer into 1st param register (rdi) */
|
/* Put current stack pointer into 1st param register (rdi) */
|
||||||
movq %rsp, %rdi
|
movq %rsp, %rdi
|
||||||
|
|
||||||
call dispatch_exception
|
call dispatch_exception
|
||||||
|
|
||||||
popq %r12
|
|
||||||
popq %r13
|
|
||||||
popq %r14
|
|
||||||
popq %r15
|
|
||||||
popq %rbx
|
|
||||||
popq %rbp
|
|
||||||
|
|
||||||
popq %rax
|
popq %rax
|
||||||
popq %rcx
|
popq %rcx
|
||||||
popq %rdx
|
popq %rdx
|
||||||
|
popq %rbx
|
||||||
|
popq %rsp
|
||||||
|
popq %rbp
|
||||||
popq %rsi
|
popq %rsi
|
||||||
popq %rdi
|
popq %rdi
|
||||||
popq %r8
|
popq %r8
|
||||||
popq %r9
|
popq %r9
|
||||||
popq %r10
|
popq %r10
|
||||||
popq %r11
|
popq %r11
|
||||||
|
popq %r12
|
||||||
|
popq %r13
|
||||||
|
popq %r14
|
||||||
|
popq %r15
|
||||||
|
|
||||||
/* Skip vector and error code*/
|
/* Skip vector and error code*/
|
||||||
add $16, %rsp
|
add $16, %rsp
|
||||||
@ -367,23 +369,22 @@ excp_rsvd:
|
|||||||
*/
|
*/
|
||||||
.align 8
|
.align 8
|
||||||
external_interrupt_save_frame:
|
external_interrupt_save_frame:
|
||||||
pushq %r11
|
pushq %r15
|
||||||
pushq %r10
|
pushq %r14
|
||||||
pushq %r9
|
pushq %r13
|
||||||
pushq %r8
|
pushq %r12
|
||||||
pushq %rdi
|
pushq %r11
|
||||||
pushq %rsi
|
pushq %r10
|
||||||
pushq %rdx
|
pushq %r9
|
||||||
pushq %rcx
|
pushq %r8
|
||||||
pushq %rax
|
pushq %rdi
|
||||||
|
pushq %rsi
|
||||||
|
pushq %rbp
|
||||||
pushq %rbp
|
pushq %rsp
|
||||||
pushq %rbx
|
pushq %rbx
|
||||||
pushq %r15
|
pushq %rdx
|
||||||
pushq %r14
|
pushq %rcx
|
||||||
pushq %r13
|
pushq %rax
|
||||||
pushq %r12
|
|
||||||
|
|
||||||
/* Put current stack pointer into 1st param register (rdi) */
|
/* Put current stack pointer into 1st param register (rdi) */
|
||||||
movq %rsp, %rdi
|
movq %rsp, %rdi
|
||||||
@ -395,22 +396,22 @@ external_interrupt_save_frame:
|
|||||||
* are for Guest, and we can execute softirq in hv_main() loop
|
* are for Guest, and we can execute softirq in hv_main() loop
|
||||||
*/
|
*/
|
||||||
|
|
||||||
popq %r12
|
|
||||||
popq %r13
|
|
||||||
popq %r14
|
|
||||||
popq %r15
|
|
||||||
popq %rbx
|
|
||||||
popq %rbp
|
|
||||||
|
|
||||||
popq %rax
|
popq %rax
|
||||||
popq %rcx
|
popq %rcx
|
||||||
popq %rdx
|
popq %rdx
|
||||||
|
popq %rbx
|
||||||
|
popq %rsp
|
||||||
|
popq %rbp
|
||||||
popq %rsi
|
popq %rsi
|
||||||
popq %rdi
|
popq %rdi
|
||||||
popq %r8
|
popq %r8
|
||||||
popq %r9
|
popq %r9
|
||||||
popq %r10
|
popq %r10
|
||||||
popq %r11
|
popq %r11
|
||||||
|
popq %r12
|
||||||
|
popq %r13
|
||||||
|
popq %r14
|
||||||
|
popq %r15
|
||||||
|
|
||||||
/* Skip vector and error code*/
|
/* Skip vector and error code*/
|
||||||
add $16, %rsp
|
add $16, %rsp
|
||||||
|
@ -261,17 +261,17 @@ void dump_intr_excp_frame(struct intr_excp_ctx *ctx)
|
|||||||
printf("= Vector=0x%016llX RIP=0x%016llX\n",
|
printf("= Vector=0x%016llX RIP=0x%016llX\n",
|
||||||
ctx->vector, ctx->rip);
|
ctx->vector, ctx->rip);
|
||||||
printf("= RAX=0x%016llX RBX=0x%016llX RCX=0x%016llX\n",
|
printf("= RAX=0x%016llX RBX=0x%016llX RCX=0x%016llX\n",
|
||||||
ctx->rax, ctx->rbx, ctx->rcx);
|
ctx->gp_regs.rax, ctx->gp_regs.rbx, ctx->gp_regs.rcx);
|
||||||
printf("= RDX=0x%016llX RDI=0x%016llX RSI=0x%016llX\n",
|
printf("= RDX=0x%016llX RDI=0x%016llX RSI=0x%016llX\n",
|
||||||
ctx->rdx, ctx->rdi, ctx->rsi);
|
ctx->gp_regs.rdx, ctx->gp_regs.rdi, ctx->gp_regs.rsi);
|
||||||
printf("= RSP=0x%016llX RBP=0x%016llX RBX=0x%016llX\n",
|
printf("= RSP=0x%016llX RBP=0x%016llX RBX=0x%016llX\n",
|
||||||
ctx->rsp, ctx->rbp, ctx->rbx);
|
ctx->gp_regs.rsp, ctx->gp_regs.rbp, ctx->gp_regs.rbx);
|
||||||
printf("= R8=0x%016llX R9=0x%016llX R10=0x%016llX\n",
|
printf("= R8=0x%016llX R9=0x%016llX R10=0x%016llX\n",
|
||||||
ctx->r8, ctx->r9, ctx->r10);
|
ctx->gp_regs.r8, ctx->gp_regs.r9, ctx->gp_regs.r10);
|
||||||
printf("= R11=0x%016llX R12=0x%016llX R13=0x%016llX\n",
|
printf("= R11=0x%016llX R12=0x%016llX R13=0x%016llX\n",
|
||||||
ctx->r11, ctx->r12, ctx->r13);
|
ctx->gp_regs.r11, ctx->gp_regs.r12, ctx->gp_regs.r13);
|
||||||
printf("= RFLAGS=0x%016llX R14=0x%016llX R15=0x%016llX\n",
|
printf("= RFLAGS=0x%016llX R14=0x%016llX R15=0x%016llX\n",
|
||||||
ctx->rflags, ctx->r14, ctx->r15);
|
ctx->rflags, ctx->gp_regs.r14, ctx->gp_regs.r15);
|
||||||
printf("= ERRCODE=0x%016llX CS=0x%016llX SS=0x%016llX\n",
|
printf("= ERRCODE=0x%016llX CS=0x%016llX SS=0x%016llX\n",
|
||||||
ctx->error_code, ctx->cs, ctx->ss);
|
ctx->error_code, ctx->cs, ctx->ss);
|
||||||
printf("\r\n");
|
printf("\r\n");
|
||||||
@ -285,7 +285,7 @@ void dump_exception(struct intr_excp_ctx *ctx, uint16_t pcpu_id)
|
|||||||
/* Dump host context */
|
/* Dump host context */
|
||||||
dump_intr_excp_frame(ctx);
|
dump_intr_excp_frame(ctx);
|
||||||
/* Show host stack */
|
/* Show host stack */
|
||||||
show_host_call_trace(ctx->rsp, ctx->rbp, pcpu_id);
|
show_host_call_trace(ctx->gp_regs.rsp, ctx->gp_regs.rbp, pcpu_id);
|
||||||
/* Dump guest context */
|
/* Dump guest context */
|
||||||
dump_guest_context(pcpu_id);
|
dump_guest_context(pcpu_id);
|
||||||
|
|
||||||
|
@ -39,29 +39,12 @@
|
|||||||
* Definition of the stack frame layout
|
* Definition of the stack frame layout
|
||||||
*/
|
*/
|
||||||
struct intr_excp_ctx {
|
struct intr_excp_ctx {
|
||||||
uint64_t r12;
|
struct cpu_gp_regs gp_regs;
|
||||||
uint64_t r13;
|
|
||||||
uint64_t r14;
|
|
||||||
uint64_t r15;
|
|
||||||
uint64_t rbx;
|
|
||||||
uint64_t rbp;
|
|
||||||
|
|
||||||
uint64_t rax;
|
|
||||||
uint64_t rcx;
|
|
||||||
uint64_t rdx;
|
|
||||||
uint64_t rsi;
|
|
||||||
uint64_t rdi;
|
|
||||||
uint64_t r8;
|
|
||||||
uint64_t r9;
|
|
||||||
uint64_t r10;
|
|
||||||
uint64_t r11;
|
|
||||||
|
|
||||||
uint64_t vector;
|
uint64_t vector;
|
||||||
uint64_t error_code;
|
uint64_t error_code;
|
||||||
uint64_t rip;
|
uint64_t rip;
|
||||||
uint64_t cs;
|
uint64_t cs;
|
||||||
uint64_t rflags;
|
uint64_t rflags;
|
||||||
uint64_t rsp;
|
|
||||||
uint64_t ss;
|
uint64_t ss;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user