Re: RISC-V: decr_pc_after_break causing problems

John Baldwin <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
On 7/3/18 5:35 PM, Palmer Dabbelt wrote:
> On Tue, 03 Jul 2018 17:17:04 PDT (-0700), Jim Wilson wrote:
>> On Mon, Jun 25, 2018 at 7:54 PM, Jim Wilson <[email protected]> wrote:
>>> The RISC-V port in the riscv-tdep.c file has
>>>   set_gdbarch_decr_pc_after_break (gdbarch, (has_compressed_isa ? 2 : 4));
>>
>> I'm still hoping to get a response to this.  I need to make
>> coordinated fixes to both gdb and the linux kernel to get breakpoints
>> working correctly.
> 
> Andrew: I think this materialized itself when you submitted the GDB patches, 
> probably because we have this in our Linux code:
> 
>     asmlinkage void do_trap_break(struct pt_regs *regs)
>     {
>     #ifdef CONFIG_GENERIC_BUG
>             if (!user_mode(regs)) {
>                     enum bug_trap_type type;
>     
>                     type = report_bug(regs->sepc, regs);
>                     switch (type) {
>                     case BUG_TRAP_TYPE_NONE:
>                             break;
>                     case BUG_TRAP_TYPE_WARN:
>                             regs->sepc += sizeof(bug_insn_t);
>                             return;
>                     case BUG_TRAP_TYPE_BUG:
>                             die(regs, "Kernel BUG");
>                     }
>             }
>     #endif /* CONFIG_GENERIC_BUG */
>     
>             force_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)(regs->sepc), current);
>             regs->sepc += 0x4;
>     }
> 
> There's at least one bug in the Linux port here: we can enter a breakpoint trap 
> via either ebreak (a 4-byte instruction) or c.ebreak (a 2-byte instruction).  
> c.ebreak is necessary for a sane debugger so we need to support it.  Our 
> options are:
> 
> * Handle c.ebreak in Linux and leave this as it stands.
> * Remove both the Linux PC adjustment and the GDB PC adjustment.
> 
> I'm inclined to take the second option as it's less code.  I suppose 
> technically it's an ABI break, but since it's broken anyway then I'm happy with 
> taking it.
> 
> Is there something I'm missing?  If not Jim will submit a Linux patch and then 
> we'll pull the trigger on this one.

FWIW, my preference would be for the decr_after_pc_break match the hardware
which from my understanding of the thread means it should always be zero.

-- 
John Baldwin
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.