diff options
-rw-r--r-- | gnu/usr.bin/binutils/gdb/amd64obsd-tdep.c | 12 | ||||
-rw-r--r-- | sys/arch/amd64/amd64/genassym.cf | 6 | ||||
-rw-r--r-- | sys/arch/amd64/amd64/spl.S | 4 | ||||
-rw-r--r-- | sys/arch/amd64/amd64/vector.S | 32 | ||||
-rw-r--r-- | sys/arch/amd64/include/frame.h | 7 | ||||
-rw-r--r-- | sys/arch/amd64/include/i82093reg.h | 4 |
6 files changed, 29 insertions, 36 deletions
diff --git a/gnu/usr.bin/binutils/gdb/amd64obsd-tdep.c b/gnu/usr.bin/binutils/gdb/amd64obsd-tdep.c index 7632ac727f8..b43c698095e 100644 --- a/gnu/usr.bin/binutils/gdb/amd64obsd-tdep.c +++ b/gnu/usr.bin/binutils/gdb/amd64obsd-tdep.c @@ -383,7 +383,6 @@ amd64obsd_trapframe_cache(struct frame_info *next_frame, void **this_cache) struct trad_frame_cache *cache; CORE_ADDR func, sp, addr; ULONGEST cs; - char *name; int i; if (*this_cache) @@ -394,16 +393,7 @@ amd64obsd_trapframe_cache(struct frame_info *next_frame, void **this_cache) func = frame_func_unwind (next_frame); sp = frame_unwind_register_unsigned (next_frame, AMD64_RSP_REGNUM); - - find_pc_partial_function (func, &name, NULL, NULL); - if (name && ((strncmp(name, "Xintr", 5) == 0) - || (strncmp (name, "Xresume", 7) == 0) - || (strncmp (name, "Xrecurse", 8) == 0) - || (strcmp (name, "Xdoreti") == 0) - || (strncmp (name, "Xsoft", 5) == 0))) - addr = sp + 8; /* It's an interrupt frame. */ - else - addr = sp; + addr = sp; for (i = 0; i < ARRAY_SIZE (amd64obsd_tf_reg_offset); i++) if (amd64obsd_tf_reg_offset[i] != -1) diff --git a/sys/arch/amd64/amd64/genassym.cf b/sys/arch/amd64/amd64/genassym.cf index bd6892d9979..5d4ddd1c3e3 100644 --- a/sys/arch/amd64/amd64/genassym.cf +++ b/sys/arch/amd64/amd64/genassym.cf @@ -1,4 +1,4 @@ -# $OpenBSD: genassym.cf,v 1.36 2018/06/05 06:39:10 guenther Exp $ +# $OpenBSD: genassym.cf,v 1.37 2018/07/03 20:15:57 guenther Exp $ # Written by Artur Grabowski art@openbsd.org, Public Domain include <sys/param.h> @@ -76,6 +76,10 @@ member tf_rflags member tf_rsp member tf_ss +struct intrframe +member if_ppl +member if_err + define FRAMESIZE sizeof(struct trapframe) struct iretq_frame diff --git a/sys/arch/amd64/amd64/spl.S b/sys/arch/amd64/amd64/spl.S index 0c2baffd532..e544520a491 100644 --- a/sys/arch/amd64/amd64/spl.S +++ b/sys/arch/amd64/amd64/spl.S @@ -1,4 +1,4 @@ -/* $OpenBSD: spl.S,v 1.14 2018/06/07 04:09:35 guenther Exp $ */ +/* $OpenBSD: spl.S,v 1.15 2018/07/03 20:15:57 guenther Exp $ */ /* $NetBSD: spl.S,v 1.3 2004/06/28 09:13:11 fvdl Exp $ */ /* @@ -144,7 +144,7 @@ KIDTVEC(spllower) * r13 - address to resume loop at */ KIDTVEC(doreti) - popq %rbx # get previous priority + movq IF_PPL(%rsp),%rbx # get previous priority decl CPUVAR(IDEPTH) leaq 1f(%rip),%r13 1: movl %ebx,%eax diff --git a/sys/arch/amd64/amd64/vector.S b/sys/arch/amd64/amd64/vector.S index aa80e9ca7bb..1369da1e07c 100644 --- a/sys/arch/amd64/amd64/vector.S +++ b/sys/arch/amd64/amd64/vector.S @@ -1,4 +1,4 @@ -/* $OpenBSD: vector.S,v 1.67 2018/07/01 16:02:12 guenther Exp $ */ +/* $OpenBSD: vector.S,v 1.68 2018/07/03 20:15:57 guenther Exp $ */ /* $NetBSD: vector.S,v 1.5 2004/06/28 09:13:11 fvdl Exp $ */ /* @@ -472,12 +472,12 @@ _C_LABEL(x2apic_eoi): KIDTVEC(recurse_lapic_ipi) INTR_RECURSE_HWFRAME pushq $0 - subq $8,%rsp /* unused __if_trapno */ + subq $8,%rsp /* if_ppl filled in below */ INTR_REENTRY jmp 1f IDTVEC(intr_lapic_ipi) pushq $0 - subq $8,%rsp /* unused __if_trapno */ + subq $8,%rsp /* if_ppl filled in below */ INTRENTRY(intr_lapic_ipi) CODEPATCH_START movl $0,_C_LABEL(local_apic)+LAPIC_EOI @@ -492,7 +492,7 @@ KIDTVEC_FALLTHROUGH(resume_lapic_ipi) sti cld SMAP_CLAC - pushq %rbx + movq %rbx,IF_PPL(%rsp) call _C_LABEL(x86_ipi_handler) jmp _C_LABEL(Xdoreti) 2: @@ -556,12 +556,12 @@ IDTVEC(ipi_invlrange) KIDTVEC(recurse_lapic_ltimer) INTR_RECURSE_HWFRAME pushq $0 - subq $8,%rsp /* unused __if_trapno */ + subq $8,%rsp /* if_ppl filled in below */ INTR_REENTRY jmp 1f IDTVEC(intr_lapic_ltimer) pushq $0 - subq $8,%rsp /* unused __if_trapno */ + subq $8,%rsp /* if_ppl filled in below */ INTRENTRY(intr_lapic_ltimer) CODEPATCH_START movl $0,_C_LABEL(local_apic)+LAPIC_EOI @@ -576,7 +576,7 @@ KIDTVEC_FALLTHROUGH(resume_lapic_ltimer) sti cld SMAP_CLAC - pushq %rbx + movq %rbx,IF_PPL(%rsp) xorq %rdi,%rdi call _C_LABEL(lapic_clockintr) jmp _C_LABEL(Xdoreti) @@ -593,12 +593,12 @@ KIDTVEC_FALLTHROUGH(resume_lapic_ltimer) KIDTVEC(recurse_xen_upcall) INTR_RECURSE_HWFRAME pushq $0 - subq $8,%rsp /* unused __if_trapno */ + subq $8,%rsp /* if_ppl filled in below */ INTR_REENTRY jmp 1f IDTVEC(intr_xen_upcall) pushq $0 - subq $8,%rsp /* unused __if_trapno */ + subq $8,%rsp /* if_ppl filled in below */ INTRENTRY(intr_xen_upcall) call _C_LABEL(xen_intr_ack) movl CPUVAR(ILEVEL),%ebx @@ -611,7 +611,7 @@ KIDTVEC_FALLTHROUGH(resume_xen_upcall) sti cld SMAP_CLAC - pushq %rbx + movq %rbx,IF_PPL(%rsp) call _C_LABEL(xen_intr) jmp _C_LABEL(Xdoreti) 2: @@ -628,12 +628,12 @@ KIDTVEC_FALLTHROUGH(resume_xen_upcall) KIDTVEC(recurse_hyperv_upcall) INTR_RECURSE_HWFRAME pushq $0 - subq $8,%rsp /* unused __if_trapno */ + subq $8,%rsp /* if_ppl filled in below */ INTR_REENTRY jmp 1f IDTVEC(intr_hyperv_upcall) pushq $0 - subq $8,%rsp /* unused __if_trapno */ + subq $8,%rsp /* if_ppl filled in below */ INTRENTRY(intr_hyperv_upcall) movl CPUVAR(ILEVEL),%ebx cmpl $IPL_NET,%ebx @@ -645,7 +645,7 @@ KIDTVEC_FALLTHROUGH(resume_hyperv_upcall) sti cld SMAP_CLAC - pushq %rbx + movq %rbx,IF_PPL(%rsp) call _C_LABEL(hv_intr) jmp _C_LABEL(Xdoreti) 2: @@ -666,7 +666,7 @@ KIDTVEC_FALLTHROUGH(resume_hyperv_upcall) #define INTRSTUB(name, num, early_ack, late_ack, mask, unmask, level_mask) \ KIDTVEC(recurse_##name##num) ;\ INTR_RECURSE_HWFRAME ;\ - subq $16,%rsp /* space for __if_{trapno,err} */;\ + subq $16,%rsp /* space for if_{ppl,err} */ ;\ INTR_REENTRY ;\ KIDTVEC_FALLTHROUGH(resume_##name##num) \ movq $IREENT_MAGIC,TF_ERR(%rsp) ;\ @@ -676,7 +676,7 @@ KIDTVEC_FALLTHROUGH(resume_##name##num) \ jmp 1f ;\ IDTVEC(intr_##name##num) ;\ pushq $0 /* dummy error code */ ;\ - subq $8,%rsp /* unused __if_trapno */ ;\ + subq $8,%rsp /* if_ppl filled in below */ ;\ INTRENTRY(intr_##name##num) ;\ movq CPUVAR(ISOURCES) + (num) * 8, %r14 ;\ mask(num) /* mask it in hardware */ ;\ @@ -689,7 +689,7 @@ IDTVEC(intr_##name##num) ;\ cmpl %ebx,%r13d ;\ jae 10f /* currently masked; hold it */ ;\ 1: \ - pushq %r13 ;\ + movq %r13,IF_PPL(%rsp) ;\ movl %ebx,CPUVAR(ILEVEL) ;\ sti ;\ cld ;\ diff --git a/sys/arch/amd64/include/frame.h b/sys/arch/amd64/include/frame.h index c6a152398eb..68b72ec04db 100644 --- a/sys/arch/amd64/include/frame.h +++ b/sys/arch/amd64/include/frame.h @@ -1,4 +1,4 @@ -/* $OpenBSD: frame.h,v 1.8 2018/04/26 12:47:02 guenther Exp $ */ +/* $OpenBSD: frame.h,v 1.9 2018/07/03 20:15:57 guenther Exp $ */ /* $NetBSD: frame.h,v 1.1 2003/04/26 18:39:40 fvdl Exp $ */ /*- @@ -116,7 +116,6 @@ struct trapframe { * Interrupt stack frame */ struct intrframe { - int64_t if_ppl; int64_t if_rdi; int64_t if_rsi; int64_t if_rdx; @@ -129,14 +128,14 @@ struct intrframe { int64_t if_r13; int64_t if_r14; int64_t if_r15; - u_int64_t __if_err; /* for compat with trap frame - err */ + int64_t if_err; /* IREENT_MAGIC if resume/recurse */ int64_t if_rbx; int64_t if_rax; int64_t tf_gs; int64_t tf_fs; int64_t tf_es; int64_t tf_ds; - u_int64_t __if_trapno; /* for compat with trap frame - trapno */ + int64_t if_ppl; /* previous priority level */ int64_t if_rbp; /* below portion defined in hardware */ int64_t if_rip; diff --git a/sys/arch/amd64/include/i82093reg.h b/sys/arch/amd64/include/i82093reg.h index e1fcfc9cd45..6f80d399a34 100644 --- a/sys/arch/amd64/include/i82093reg.h +++ b/sys/arch/amd64/include/i82093reg.h @@ -1,4 +1,4 @@ -/* $OpenBSD: i82093reg.h,v 1.6 2016/06/29 06:05:15 mlarkin Exp $ */ +/* $OpenBSD: i82093reg.h,v 1.7 2018/07/03 20:15:57 guenther Exp $ */ /* $NetBSD: i82093reg.h,v 1.1 2003/02/26 21:26:10 fvdl Exp $ */ /*- @@ -160,7 +160,7 @@ ioapic_asm_unlock(num) #define ioapic_unmask(num) \ - cmpq $IREENT_MAGIC,(TF_ERR+8)(%rsp) ;\ + cmpq $IREENT_MAGIC,IF_ERR(%rsp) ;\ jne 79f ;\ movq IS_PIC(%r14),%rdi ;\ ioapic_asm_lock(num) ;\ |