[PATCH 0/9] DWARF Register Number Handling, Including RISC-V CSRs

Palmer Dabbelt via binutils binutils@sourceware.org
Fri Nov 22 22:33:00 GMT 2019


On Fri, 22 Nov 2019 04:10:24 PST (-0800), andrew.burgess@embecosm.com wrote:
> The aim of this series is to provide support for using RISC-V CSRs
> (Control Status Registers) in gas .cfi directives.  The problem with
> this is that the DWARF register numbers for these registers are rather
> large, in the range 4096 - 8191, and the number space is only sparsely
> populated.  The existing code for mapping DWARF register numbers to
> names is not really setup to handle this situation, and additionally,
> the default DWARF CIE version that gas uses only has a single byte
> return address column, which is overflowed by these CSRs.
>
> This series starts with some general code clean up (I think) in the
> area around DWARF register number handling, introduces a new mechanism
> for mapping from DWARF register numbers to names, and then adds
> support for RISC-V CSRs.  Finally I make DWARF CIE version 3 the
> default for RISC-V, this should be largely invisible to consumers,
> except the return address column is now uleb128 instead of ubyte.

Thanks!  Aside from that minor nit about naming unknown CSRs this looks good to
me.

>
> ---
>
> Andrew Burgess (9):
>   gas/riscv: Remove unneeded structure
>   binutils: Be more forgiving of targets with large numbers of registers
>   binutils: Rename init_dwarf_regnames
>   binutils: Add a new function to initialise DWARF register name state
>   binutils: Make some functions static in dwarf.c
>   binutils: Make DWARF register name lookup be via a function pointer
>   binutils/gas/riscv: Add DWARF register numbers for CSRs
>   gas: Check for overflow on return column in version 1 CIE DWARF
>   gas/riscv: Produce version 3 DWARF CIE by default
>
>  binutils/ChangeLog                            |  59 ++++++
>  binutils/dwarf.c                              | 143 ++++++++++++--
>  binutils/dwarf.h                              |  10 +-
>  binutils/objdump.c                            |  40 +---
>  binutils/readelf.c                            |   2 +-
>  gas/ChangeLog                                 |  30 +++
>  gas/as.c                                      |  10 +-
>  gas/config/tc-riscv.c                         |  18 +-
>  gas/dw2gencfi.c                               |   7 +-
>  gas/dwarf2dbg.c                               |  11 ++
>  gas/testsuite/gas/riscv/cie-rtn-col-1.d       |   3 +
>  gas/testsuite/gas/riscv/cie-rtn-col-3.d       |  17 ++
>  gas/testsuite/gas/riscv/cie-rtn-col.s         |   3 +
>  gas/testsuite/gas/riscv/csr-dw-regnums.d      | 265 ++++++++++++++++++++++++++
>  gas/testsuite/gas/riscv/csr-dw-regnums.s      | 255 +++++++++++++++++++++++++
>  gas/testsuite/gas/riscv/default-cie-version.d |  15 ++
>  gas/testsuite/gas/riscv/default-cie-version.s |   2 +
>  17 files changed, 815 insertions(+), 75 deletions(-)
>  create mode 100644 gas/testsuite/gas/riscv/cie-rtn-col-1.d
>  create mode 100644 gas/testsuite/gas/riscv/cie-rtn-col-3.d
>  create mode 100644 gas/testsuite/gas/riscv/cie-rtn-col.s
>  create mode 100644 gas/testsuite/gas/riscv/csr-dw-regnums.d
>  create mode 100644 gas/testsuite/gas/riscv/csr-dw-regnums.s
>  create mode 100644 gas/testsuite/gas/riscv/default-cie-version.d
>  create mode 100644 gas/testsuite/gas/riscv/default-cie-version.s



More information about the Binutils mailing list