binutils/gas/riscv: Add DWARF register numbers for CSRs
authorAndrew Burgess <andrew.burgess@embecosm.com>
Mon, 18 Nov 2019 16:00:59 +0000 (16:00 +0000)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Thu, 28 Nov 2019 00:03:05 +0000 (00:03 +0000)
commit4762fe621e84347b6e1ad1f2d16d2bc6cd28495e
treefde8d0eaf6ccacdd25c11b29283328ad3956ee2c
parent1296bc99b1bf5da38be18ac1fdf6ad8d1b697e6b
binutils/gas/riscv: Add DWARF register numbers for CSRs

This commit gives DWARF register numbers to the RISC-V CSRs inline
with the RISC-V ELF specification here:

  https://github.com/riscv/riscv-elf-psabi-doc/blob/master/riscv-elf.md

The CSRs are defined being numbered from 4096 to 8191.

This adds support to the assembler, required in order to reference
CSRs in, for example .cfi directives.

I have then extended dwarf.c in order to support printing CSR names in
the dumped DWARF output.  As the CSR name space is quite large and
only sparsely populated, I have provided a new function to perform
RISC-V DWARF register name lookup which uses a switch statement rather
than the table base approach that other architectures use.

Any CSR that does not have a known name will return a name based on
'csr%d' with the %d being replaced by the offset of the CSR from 4096.

gas/ChangeLog:

* config/tc-riscv.c (tc_riscv_regname_to_dw2regnum): Lookup CSR
names too.
* testsuite/gas/riscv/csr-dw-regnums.d: New file.
* testsuite/gas/riscv/csr-dw-regnums.s: New file.

binutils/ChangeLog:

* dwarf.c (regname_internal_riscv): New function.
(init_dwarf_regnames_riscv): Use new function.

Change-Id: I3f70bc24fa8b3c75744e6775eeeb87db70c7ecfb
binutils/ChangeLog
binutils/dwarf.c
gas/ChangeLog
gas/config/tc-riscv.c
gas/testsuite/gas/riscv/csr-dw-regnums.d [new file with mode: 0644]
gas/testsuite/gas/riscv/csr-dw-regnums.s [new file with mode: 0644]