This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH 0/9] DWARF Register Number Handling, Including RISC-V CSRs
- From: "Palmer Dabbelt via binutils" <binutils at sourceware dot org>
- To: andrew dot burgess at embecosm dot com
- Cc: binutils at sourceware dot org, Jim Wilson <jimw at sifive dot com>, nelson dot chu at sifive dot com, andrew dot burgess at embecosm dot com
- Date: Fri, 22 Nov 2019 14:33:05 -0800 (PST)
- Subject: Re: [PATCH 0/9] DWARF Register Number Handling, Including RISC-V CSRs
- Reply-to: Palmer Dabbelt <palmerdabbelt at google dot com>
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