LoongArch: Assign DWARF register numbers to register aliases

.cfi directives only support the use of register numbers and not
register names or aliases.

This commit adds support for 4 formats, for example:
  .cfi_offset r1, 8
  .cfi_offset ra, 8
  .cfi_offset $r1,8
  .cfi_offset $ra,8

The above .cfi directives are equivalent and all represent dwarf
register number 1.

Display register aliases as specified in the psABI during disassembly.
This commit is contained in:
Lulu Cai
2024-12-09 11:21:40 +08:00
committed by liuzhensong
parent 01d8e0d24a
commit 3d75969bd0
7 changed files with 845 additions and 17 deletions

View File

@@ -8796,6 +8796,27 @@ init_dwarf_regnames_riscv (void)
dwarf_regnames_lookup_func = regname_internal_riscv;
}
static const char *const dwarf_regnames_loongarch[] =
{
"$zero", "$ra", "$tp", "$sp", "$a0", "$a1", "$a2", "$a3", /* 0-7 */
"$a4", "$a5", "$a6", "$a7", "$t0", "$t1", "$t2", "$t3", /* 8-15 */
"$t4", "$t5", "$t6", "$t7", "$t8", "$r21","$fp", "$s0", /* 16-23 */
"$s1", "$s2", "$s3", "$s4", "$s5", "$s6", "$s7", "$s8", /* 24-31 */
"$fa0", "$fa1", "$fa2", "$fa3", "$fa4", "$fa5", "$fa6", /* 32-38 */
"$fa7", "$ft0", "$ft1", "$ft2", "$ft3", "$ft4", "$ft5", /* 39-45 */
"$ft6", "$ft7", "$ft8", "$ft9", "$ft10", "$ft11", "$ft12", /* 46-52 */
"$ft13", "$ft14", "$ft15", "$fs0", "$fs1", "$fs2", "$fs3", /* 53-59 */
"$fs4", "$fs5", "$fs6", "$fs7", /* 60-63 */
};
static void
init_dwarf_regnames_loongarch (void)
{
dwarf_regnames = dwarf_regnames_loongarch;
dwarf_regnames_count = ARRAY_SIZE (dwarf_regnames_loongarch);
dwarf_regnames_lookup_func = regname_internal_by_table_only;
}
void
init_dwarf_regnames_by_elf_machine_code (unsigned int e_machine)
{
@@ -8830,6 +8851,10 @@ init_dwarf_regnames_by_elf_machine_code (unsigned int e_machine)
init_dwarf_regnames_riscv ();
break;
case EM_LOONGARCH:
init_dwarf_regnames_loongarch ();
break;
default:
break;
}
@@ -8879,6 +8904,10 @@ init_dwarf_regnames_by_bfd_arch_and_mach (enum bfd_architecture arch,
init_dwarf_regnames_riscv ();
break;
case bfd_arch_loongarch:
init_dwarf_regnames_loongarch ();
break;
default:
break;
}