Giter Club home page Giter Club logo

Comments (9)

ilg-ul avatar ilg-ul commented on July 25, 2024

isn't gdb aware of the architecture details?

from riscv-binutils-gdb.

TommyMurphyTM1234 avatar TommyMurphyTM1234 commented on July 25, 2024

I think it should be from misa and maybe other csrs but at the moment to debug our specific RV32IM I have to do this otherwise gdb will assume a 64 bit target and ability to use compressed BP instructions:

set arch riscv:rv32
set riscv use_compressed_breakpoints no

from riscv-binutils-gdb.

timsifive avatar timsifive commented on July 25, 2024

gdb attempts to read MISA, and if C is set it will use compressed breakpoints: https://github.com/riscv/riscv-binutils-gdb/blob/riscv-binutils-2.29/gdb/riscv-tdep.c#L231

In older versions of the code it would be unable to read MISA if it was at the old location (it moved in some priv spec update). 697d5b8 fixed that issue.

from riscv-binutils-gdb.

TommyMurphyTM1234 avatar TommyMurphyTM1234 commented on July 25, 2024

But why bother trying to use compressed BP instructions when uncompressed BP instructions are universally compatible?
Seems like unnecessary complication for the implementation and the end user to use compressed BP instructions?

from riscv-binutils-gdb.

timsifive avatar timsifive commented on July 25, 2024

The software breakpoint instruction can be no longer than the instruction it is replacing, in case the program contains a jump to the instruction right after it. Rather than figuring out the size of the instruction, it's much simpler just to use the smallest supported breakpoint instruction.

from riscv-binutils-gdb.

TommyMurphyTM1234 avatar TommyMurphyTM1234 commented on July 25, 2024

The software breakpoint instruction can be no longer than the instruction it is replacing, in case the program contains a jump to the instruction right after it. Rather than figuring out the size of the instruction, it's much simpler just to use the smallest supported breakpoint instruction.

Thanks Tim - that explains matters alright.

gdb attempts to read MISA, and if C is set it will use compressed breakpoints: https://github.com/riscv/riscv-binutils-gdb/blob/riscv-binutils-2.29/gdb/riscv-tdep.c#L231

In older versions of the code it would be unable to read MISA if it was at the old location (it moved in some priv spec update). 697d5b8 fixed that issue.

So a build of gdb with that mod no longer needs:

set riscv use_compressed_breakpoints no

regardless of the draft privilege spec that the target adheres to (1.9, 1.9.1 or 1.10)?

from riscv-binutils-gdb.

TommyMurphyTM1234 avatar TommyMurphyTM1234 commented on July 25, 2024

So a build of gdb with that mod no longer needs:

set riscv use_compressed_breakpoints no

I just tried it with an RV32IM adhering to the 1.9 priv spec and that seems to be the case - i.e. it does the right thing (uses non compressed BP instruction) even when set riscv use_compressed_breakpoints no) is NOT specified.

Unfortunately set arch riscv:rv32 is still needed - shouldn't it be able to figure out the XLEN from misa or some other CSR to obviate the need for this?

from riscv-binutils-gdb.

timsifive avatar timsifive commented on July 25, 2024

Unfortunately set arch riscv:rv32 is still needed - shouldn't it be able to figure out the XLEN from misa or some other CSR to obviate the need for this?

Yes, but unfortunately it's not so easily implemented. This is #54

from riscv-binutils-gdb.

TommyMurphyTM1234 avatar TommyMurphyTM1234 commented on July 25, 2024

Since the rationale for using compressed bps where supported was explained above I'm closing this issue now.

from riscv-binutils-gdb.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.