From patchwork Tue Nov 26 09:13:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lulu Cai X-Patchwork-Id: 101884 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id BA6C93857C68 for ; Tue, 26 Nov 2024 09:14:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BA6C93857C68 X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by sourceware.org (Postfix) with ESMTP id 184F83858D33 for ; Tue, 26 Nov 2024 09:13:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 184F83858D33 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=loongson.cn ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 184F83858D33 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1732612409; cv=none; b=iA6Q7cA/2ZEerynaTgDXvEMNpRus4y/a0rcaHSqAxZlDVl/Y6FV4QV86vWn23g5IITSqsAsvuzwlybiROAY4VPjNZSbxbqYRIBgRlhXOlVHUoBru4GEEoA+BbOFPeIw4pvpDmtQzpo15afqe959RqJqdCsotVxKEKSY1hwNsSVo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1732612409; c=relaxed/simple; bh=4wLto0sI8u063O6w/ogsYARonj/QG6oZS4AyqScxn6g=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=YaM7RIJWsco+XNKlD2NP389aj7zu8l6WP6QGCQlkSfrMxm4+dIuJT+wmt+5U8hIK8rEqkGYZejJFLjidZlagAYLztReJ+UNZBtZlxSDajQxwz7bAQJ/MHDBk32GtbP7lLojorUWSCcnGDjiSh2lb7PF/oRQaG7GJI7OHlquCW9M= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 184F83858D33 Received: from loongson.cn (unknown [10.2.6.5]) by gateway (Coremail) with SMTP id _____8CxyuA1kUVnTAJJAA--.10652S3; Tue, 26 Nov 2024 17:13:25 +0800 (CST) Received: from 5.. (unknown [10.2.6.5]) by front1 (Coremail) with SMTP id qMiowMCxbUc0kUVniltoAA--.42032S4; Tue, 26 Nov 2024 17:13:24 +0800 (CST) From: Lulu Cai To: binutils@sourceware.org Cc: xuchenghua@loongson.cn, chenglulu@loongson.cn, mengqinggang@loongson.cn, xry111@xry111.site, i.swmail@xen0n.name, maskray@google.com, luweining@loongson.cn, hejinyang@loongson.cn, wanglei@loongson.cn, Lulu Cai Subject: [PATCH v1] LoongArch: Assign DWARF register numbers to register aliases Date: Tue, 26 Nov 2024 17:13:21 +0800 Message-Id: <20241126091321.4140908-1-cailulu@loongson.cn> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-CM-TRANSID: qMiowMCxbUc0kUVniltoAA--.42032S4 X-CM-SenderInfo: xfdlz3tox6z05rqj20fqof0/1tbiAgENB2dFBNIJmQAAst X-Coremail-Antispam: 1Uk129KBj9fXoWfAw43XFyrZw1kKF4rurW3urX_yoW5uryfCo ZFyFZrXw17ur4ktwn5ta40grWDG3yqkr4kArWjyrs8Gr13Kw4jqrZaqF1kXayDGrs7CFZ5 Za4jgr92y39rGrsxl-sFpf9Il3svdjkaLaAFLSUrUUUU1b8apTn2vfkv8UJUUUU8wcxFpf 9Il3svdxBIdaVrn0xqx4xG64xvF2IEw4CE5I8CrVC2j2Jv73VFW2AGmfu7bjvjm3AaLaJ3 UjIYCTnIWjp_UUUYg7kC6x804xWl14x267AKxVWUJVW8JwAFc2x0x2IEx4CE42xK8VAvwI 8IcIk0rVWrJVCq3wAFIxvE14AKwVWUXVWUAwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xG Y2AK021l84ACjcxK6xIIjxv20xvE14v26r4j6ryUM28EF7xvwVC0I7IYx2IY6xkF7I0E14 v26r4j6F4UM28EF7xvwVC2z280aVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIEc7CjxVAF wI0_Gr1j6F4UJwAaw2AFwI0_Jrv_JF1le2I262IYc4CY6c8Ij28IcVAaY2xG8wAqjxCEc2 xF0cIa020Ex4CE44I27wAqx4xG64xvF2IEw4CE5I8CrVC2j2WlYx0E2Ix0cI8IcVAFwI0_ Jrv_JF1lYx0Ex4A2jsIE14v26r1j6r4UMcvjeVCFs4IE7xkEbVWUJVW8JwACjcxG0xvY0x 0EwIxGrwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwCFI7km07C267AK xVWUXVWUAwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67 AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI 42IY6xIIjxv20xvEc7CjxVAFwI0_Jr0_Gr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMI IF0xvEx4A2jsIE14v26r1j6r4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Jr0_GrUvcSsGvfC2 KfnxnUUI43ZEXa7IU8hiSPUUUUU== X-Spam-Status: No, score=-13.1 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org .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. --- binutils/dwarf.c | 28 ++ gas/config/tc-loongarch.c | 103 +++++++- gas/config/tc-loongarch.h | 8 +- gas/testsuite/gas/loongarch/dwarf-regnum.d | 274 ++++++++++++++++++++ gas/testsuite/gas/loongarch/dwarf-regnum.s | 281 +++++++++++++++++++++ include/opcode/loongarch.h | 4 + opcodes/loongarch-opc.c | 32 +++ 7 files changed, 713 insertions(+), 17 deletions(-) create mode 100644 gas/testsuite/gas/loongarch/dwarf-regnum.d create mode 100644 gas/testsuite/gas/loongarch/dwarf-regnum.s diff --git a/binutils/dwarf.c b/binutils/dwarf.c index 4b46100c753..cf4ce815408 100644 --- a/binutils/dwarf.c +++ b/binutils/dwarf.c @@ -8797,6 +8797,26 @@ 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", "$fa7", + "$ft0", "$ft1", "$ft2", "$ft3", "$ft4", "$ft5", "$ft6", "$ft7", + "$ft8", "$ft9", "$ft10", "$ft11", "$ft12", "$ft13", "$ft14", "$ft15", + "$fs0", "$fs1", "$fs2", "$fs3", "$fs4", "$fs5", "$fs6", "$fs7", +}; + +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) { @@ -8831,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; } @@ -8880,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; } diff --git a/gas/config/tc-loongarch.c b/gas/config/tc-loongarch.c index 411c24b41f0..85b13c3dcae 100644 --- a/gas/config/tc-loongarch.c +++ b/gas/config/tc-loongarch.c @@ -276,6 +276,8 @@ static struct htab *c_htab = NULL; static struct htab *cr_htab = NULL; static struct htab *v_htab = NULL; static struct htab *x_htab = NULL; +static struct htab *cfi_r_htab = NULL; +static struct htab *cfi_f_htab = NULL; void loongarch_after_parse_args () @@ -322,15 +324,27 @@ loongarch_after_parse_args () if (!r_deprecated_htab) r_deprecated_htab = str_htab_create (), str_hash_insert (r_deprecated_htab, "", 0, 0); + /* Init cfi registers alias. */ + if (!cfi_r_htab) + cfi_r_htab = str_htab_create (), str_hash_insert (cfi_r_htab, "", 0, 0); r_abi_names = loongarch_r_normal_name; for (i = 0; i < ARRAY_SIZE (loongarch_r_normal_name); i++) - str_hash_insert (r_htab, loongarch_r_normal_name[i], (void *) (i + 1), 0); - + { + str_hash_insert (r_htab, loongarch_r_normal_name[i], + (void *) (i + 1), 0); + str_hash_insert (cfi_r_htab, loongarch_r_normal_name[i], + (void *) (i + 1), 0); + } /* Init ilp32/lp64 registers alias. */ r_abi_names = loongarch_r_alias; for (i = 0; i < ARRAY_SIZE (loongarch_r_alias); i++) - str_hash_insert (r_htab, loongarch_r_alias[i], (void *) (i + 1), 0); + { + str_hash_insert (r_htab, loongarch_r_alias[i], + (void *) (i + 1), 0); + str_hash_insert (cfi_r_htab, loongarch_r_alias[i], + (void *) (i + 1), 0); + } for (i = 0; i < ARRAY_SIZE (loongarch_r_alias_1); i++) str_hash_insert (r_htab, loongarch_r_alias_1[i], (void *) (i + 1), 0); @@ -339,6 +353,15 @@ loongarch_after_parse_args () str_hash_insert (r_deprecated_htab, loongarch_r_alias_deprecated[i], (void *) (i + 1), 0); + /* The .cfi directive supports register aliases without the "$" prefix. */ + for (i = 0; i < ARRAY_SIZE (loongarch_r_cfi_name); i++) + { + str_hash_insert (cfi_r_htab, loongarch_r_cfi_name[i], + (void *)(i + 1), 0); + str_hash_insert (cfi_r_htab, loongarch_r_cfi_name_alias[i], + (void *)(i + 1), 0); + } + if (!cr_htab) cr_htab = str_htab_create (), str_hash_insert (cr_htab, "", 0, 0); @@ -353,21 +376,39 @@ loongarch_after_parse_args () if (!f_deprecated_htab) f_deprecated_htab = str_htab_create (), str_hash_insert (f_deprecated_htab, "", 0, 0); + if (!cfi_f_htab) + cfi_f_htab = str_htab_create (), str_hash_insert (cfi_f_htab, "", 0, 0); f_abi_names = loongarch_f_normal_name; for (i = 0; i < ARRAY_SIZE (loongarch_f_normal_name); i++) - str_hash_insert (f_htab, loongarch_f_normal_name[i], (void *) (i + 1), - 0); - + { + str_hash_insert (f_htab, loongarch_f_normal_name[i], + (void *) (i + 1), 0); + str_hash_insert (cfi_f_htab, loongarch_f_normal_name[i], + (void *) (i + 1), 0); + } /* Init float-ilp32/lp64 registers alias. */ f_abi_names = loongarch_f_alias; for (i = 0; i < ARRAY_SIZE (loongarch_f_alias); i++) - str_hash_insert (f_htab, loongarch_f_alias[i], - (void *) (i + 1), 0); + { + str_hash_insert (f_htab, loongarch_f_alias[i], + (void *) (i + 1), 0); + str_hash_insert (cfi_f_htab, loongarch_f_alias[i], + (void *) (i + 1), 0); + } for (i = 0; i < ARRAY_SIZE (loongarch_f_alias_deprecated); i++) str_hash_insert (f_deprecated_htab, loongarch_f_alias_deprecated[i], (void *) (i + 1), 0); + /* The .cfi directive supports register aliases without the "$" prefix. */ + for (i = 0; i < ARRAY_SIZE (loongarch_f_cfi_name); i++) + { + str_hash_insert (cfi_f_htab, loongarch_f_cfi_name[i], + (void *)(i + 1), 0); + str_hash_insert (cfi_f_htab, loongarch_f_cfi_name_alias[i], + (void *)(i + 1), 0); + } + if (!fc_htab) fc_htab = str_htab_create (), str_hash_insert (fc_htab, "", 0, 0); @@ -1864,6 +1905,46 @@ loongarch_cfi_frame_initial_instructions (void) cfi_add_CFA_def_cfa_register (3 /* $sp */); } +/* Convert REGNAME to a DWARF register number. */ +int +tc_loongarch_regname_to_dw2regnum (char *regname) +{ + int reg; + + /* Look up in the general purpose register table. */ + if ((reg = (intptr_t) str_hash_find (cfi_r_htab, regname)) > 0) + return reg - 1; + + /* Look up in the floating point register table. */ + if ((reg = (intptr_t) str_hash_find (cfi_f_htab, regname)) > 0) + return reg + 31; + + as_bad (_("unknown register `%s`"), regname); + return -1; +} + +/* Derived from tc_parse_to_dw2regnum, but excluding the case where + the prefix '%'. */ +void +tc_loongarch_parse_to_dw2regnum (expressionS *exp) +{ + SKIP_WHITESPACE (); + if (is_name_beginner (*input_line_pointer)) + { + char *name, c; + + c = get_symbol_name (& name); + + exp->X_op = O_constant; + exp->X_add_number = tc_loongarch_regname_to_dw2regnum (name); + + restore_line_pointer (c); + } + else + expression_and_evaluate (exp); +} + + void loongarch_pre_output_hook (void) { @@ -1909,12 +1990,6 @@ loongarch_pre_output_hook (void) subseg_set (seg, subseg); } -void -tc_loongarch_parse_to_dw2regnum (expressionS *exp) -{ - expression_and_evaluate (exp); -} - void md_show_usage (FILE *stream) { diff --git a/gas/config/tc-loongarch.h b/gas/config/tc-loongarch.h index b815ebbef6e..582edca7883 100644 --- a/gas/config/tc-loongarch.h +++ b/gas/config/tc-loongarch.h @@ -124,13 +124,15 @@ extern int loongarch_force_relocation (struct fix *); loongarch_cfi_frame_initial_instructions extern void loongarch_cfi_frame_initial_instructions (void); +#define tc_parse_to_dw2regnum tc_loongarch_parse_to_dw2regnum +extern void tc_loongarch_parse_to_dw2regnum (expressionS *); + +extern int tc_loongarch_regname_to_dw2regnum (char *); + #define tc_symbol_new_hook(sym) \ if (0 == strcmp (sym->bsym->name, FAKE_LABEL_NAME)) \ S_SET_OTHER (sym, STV_HIDDEN); -#define tc_parse_to_dw2regnum tc_loongarch_parse_to_dw2regnum -extern void tc_loongarch_parse_to_dw2regnum (expressionS *); - extern void loongarch_pre_output_hook (void); #define md_pre_output_hook loongarch_pre_output_hook () #define GAS_SORT_RELOCS 1 diff --git a/gas/testsuite/gas/loongarch/dwarf-regnum.d b/gas/testsuite/gas/loongarch/dwarf-regnum.d new file mode 100644 index 00000000000..6f37a40fc4b --- /dev/null +++ b/gas/testsuite/gas/loongarch/dwarf-regnum.d @@ -0,0 +1,274 @@ +#objdump: --dwarf=frames + +.*: file format .* + +Contents of the .* section: + + +00000000 [a-zA-Z0-9]+ 0[a-zA-Z0-9]+ CIE + Version: .* + Augmentation: .* + Code alignment factor: .* + Data alignment factor: .* + Return address column: .* + Augmentation data: .* +#... +[a-zA-Z0-9]+ [a-zA-Z0-9]+ [a-zA-Z0-9]+ FDE cie=00000000 pc=[a-zA-Z0-9]+\.\.[a-zA-Z0-9]+ + DW_CFA_advance_loc: 4 to 0000000000000020 + DW_CFA_offset_extended_sf: r0 \(\$zero\) at cfa\+8 + DW_CFA_offset_extended_sf: r1 \(\$ra\) at cfa\+16 + DW_CFA_offset_extended_sf: r2 \(\$tp\) at cfa\+24 + DW_CFA_offset_extended_sf: r3 \(\$sp\) at cfa\+32 + DW_CFA_offset_extended_sf: r4 \(\$a0\) at cfa\+40 + DW_CFA_offset_extended_sf: r5 \(\$a1\) at cfa\+48 + DW_CFA_offset_extended_sf: r6 \(\$a2\) at cfa\+56 + DW_CFA_offset_extended_sf: r7 \(\$a3\) at cfa\+64 + DW_CFA_offset_extended_sf: r8 \(\$a4\) at cfa\+72 + DW_CFA_offset_extended_sf: r9 \(\$a5\) at cfa\+80 + DW_CFA_offset_extended_sf: r10 \(\$a6\) at cfa\+88 + DW_CFA_offset_extended_sf: r11 \(\$a7\) at cfa\+96 + DW_CFA_offset_extended_sf: r12 \(\$t0\) at cfa\+104 + DW_CFA_offset_extended_sf: r13 \(\$t1\) at cfa\+112 + DW_CFA_offset_extended_sf: r14 \(\$t2\) at cfa\+120 + DW_CFA_offset_extended_sf: r15 \(\$t3\) at cfa\+128 + DW_CFA_offset_extended_sf: r16 \(\$t4\) at cfa\+136 + DW_CFA_offset_extended_sf: r17 \(\$t5\) at cfa\+144 + DW_CFA_offset_extended_sf: r18 \(\$t6\) at cfa\+152 + DW_CFA_offset_extended_sf: r19 \(\$t7\) at cfa\+160 + DW_CFA_offset_extended_sf: r20 \(\$t8\) at cfa\+168 + DW_CFA_offset_extended_sf: r21 \(\$r21\) at cfa\+176 + DW_CFA_offset_extended_sf: r22 \(\$fp\) at cfa\+184 + DW_CFA_offset_extended_sf: r23 \(\$s0\) at cfa\+192 + DW_CFA_offset_extended_sf: r24 \(\$s1\) at cfa\+200 + DW_CFA_offset_extended_sf: r25 \(\$s2\) at cfa\+208 + DW_CFA_offset_extended_sf: r26 \(\$s3\) at cfa\+216 + DW_CFA_offset_extended_sf: r27 \(\$s4\) at cfa\+224 + DW_CFA_offset_extended_sf: r28 \(\$s5\) at cfa\+232 + DW_CFA_offset_extended_sf: r29 \(\$s6\) at cfa\+240 + DW_CFA_offset_extended_sf: r30 \(\$s7\) at cfa\+248 + DW_CFA_offset_extended_sf: r31 \(\$s8\) at cfa\+256 + DW_CFA_offset_extended_sf: r0 \(\$zero\) at cfa\+8 + DW_CFA_offset_extended_sf: r1 \(\$ra\) at cfa\+16 + DW_CFA_offset_extended_sf: r2 \(\$tp\) at cfa\+24 + DW_CFA_offset_extended_sf: r3 \(\$sp\) at cfa\+32 + DW_CFA_offset_extended_sf: r4 \(\$a0\) at cfa\+40 + DW_CFA_offset_extended_sf: r5 \(\$a1\) at cfa\+48 + DW_CFA_offset_extended_sf: r6 \(\$a2\) at cfa\+56 + DW_CFA_offset_extended_sf: r7 \(\$a3\) at cfa\+64 + DW_CFA_offset_extended_sf: r8 \(\$a4\) at cfa\+72 + DW_CFA_offset_extended_sf: r9 \(\$a5\) at cfa\+80 + DW_CFA_offset_extended_sf: r10 \(\$a6\) at cfa\+88 + DW_CFA_offset_extended_sf: r11 \(\$a7\) at cfa\+96 + DW_CFA_offset_extended_sf: r12 \(\$t0\) at cfa\+104 + DW_CFA_offset_extended_sf: r13 \(\$t1\) at cfa\+112 + DW_CFA_offset_extended_sf: r14 \(\$t2\) at cfa\+120 + DW_CFA_offset_extended_sf: r15 \(\$t3\) at cfa\+128 + DW_CFA_offset_extended_sf: r16 \(\$t4\) at cfa\+136 + DW_CFA_offset_extended_sf: r17 \(\$t5\) at cfa\+144 + DW_CFA_offset_extended_sf: r18 \(\$t6\) at cfa\+152 + DW_CFA_offset_extended_sf: r19 \(\$t7\) at cfa\+160 + DW_CFA_offset_extended_sf: r20 \(\$t8\) at cfa\+168 + DW_CFA_offset_extended_sf: r21 \(\$r21\) at cfa\+176 + DW_CFA_offset_extended_sf: r22 \(\$fp\) at cfa\+184 + DW_CFA_offset_extended_sf: r23 \(\$s0\) at cfa\+192 + DW_CFA_offset_extended_sf: r24 \(\$s1\) at cfa\+200 + DW_CFA_offset_extended_sf: r25 \(\$s2\) at cfa\+208 + DW_CFA_offset_extended_sf: r26 \(\$s3\) at cfa\+216 + DW_CFA_offset_extended_sf: r27 \(\$s4\) at cfa\+224 + DW_CFA_offset_extended_sf: r28 \(\$s5\) at cfa\+232 + DW_CFA_offset_extended_sf: r29 \(\$s6\) at cfa\+240 + DW_CFA_offset_extended_sf: r30 \(\$s7\) at cfa\+248 + DW_CFA_offset_extended_sf: r31 \(\$s8\) at cfa\+256 + DW_CFA_offset_extended_sf: r0 \(\$zero\) at cfa\+8 + DW_CFA_offset_extended_sf: r1 \(\$ra\) at cfa\+16 + DW_CFA_offset_extended_sf: r2 \(\$tp\) at cfa\+24 + DW_CFA_offset_extended_sf: r3 \(\$sp\) at cfa\+32 + DW_CFA_offset_extended_sf: r4 \(\$a0\) at cfa\+40 + DW_CFA_offset_extended_sf: r5 \(\$a1\) at cfa\+48 + DW_CFA_offset_extended_sf: r6 \(\$a2\) at cfa\+56 + DW_CFA_offset_extended_sf: r7 \(\$a3\) at cfa\+64 + DW_CFA_offset_extended_sf: r8 \(\$a4\) at cfa\+72 + DW_CFA_offset_extended_sf: r9 \(\$a5\) at cfa\+80 + DW_CFA_offset_extended_sf: r10 \(\$a6\) at cfa\+88 + DW_CFA_offset_extended_sf: r11 \(\$a7\) at cfa\+96 + DW_CFA_offset_extended_sf: r12 \(\$t0\) at cfa\+104 + DW_CFA_offset_extended_sf: r13 \(\$t1\) at cfa\+112 + DW_CFA_offset_extended_sf: r14 \(\$t2\) at cfa\+120 + DW_CFA_offset_extended_sf: r15 \(\$t3\) at cfa\+128 + DW_CFA_offset_extended_sf: r16 \(\$t4\) at cfa\+136 + DW_CFA_offset_extended_sf: r17 \(\$t5\) at cfa\+144 + DW_CFA_offset_extended_sf: r18 \(\$t6\) at cfa\+152 + DW_CFA_offset_extended_sf: r19 \(\$t7\) at cfa\+160 + DW_CFA_offset_extended_sf: r20 \(\$t8\) at cfa\+168 + DW_CFA_offset_extended_sf: r21 \(\$r21\) at cfa\+176 + DW_CFA_offset_extended_sf: r22 \(\$fp\) at cfa\+184 + DW_CFA_offset_extended_sf: r23 \(\$s0\) at cfa\+192 + DW_CFA_offset_extended_sf: r24 \(\$s1\) at cfa\+200 + DW_CFA_offset_extended_sf: r25 \(\$s2\) at cfa\+208 + DW_CFA_offset_extended_sf: r26 \(\$s3\) at cfa\+216 + DW_CFA_offset_extended_sf: r27 \(\$s4\) at cfa\+224 + DW_CFA_offset_extended_sf: r28 \(\$s5\) at cfa\+232 + DW_CFA_offset_extended_sf: r29 \(\$s6\) at cfa\+240 + DW_CFA_offset_extended_sf: r30 \(\$s7\) at cfa\+248 + DW_CFA_offset_extended_sf: r31 \(\$s8\) at cfa\+256 + DW_CFA_offset_extended_sf: r0 \(\$zero\) at cfa\+8 + DW_CFA_offset_extended_sf: r1 \(\$ra\) at cfa\+16 + DW_CFA_offset_extended_sf: r2 \(\$tp\) at cfa\+24 + DW_CFA_offset_extended_sf: r3 \(\$sp\) at cfa\+32 + DW_CFA_offset_extended_sf: r4 \(\$a0\) at cfa\+40 + DW_CFA_offset_extended_sf: r5 \(\$a1\) at cfa\+48 + DW_CFA_offset_extended_sf: r6 \(\$a2\) at cfa\+56 + DW_CFA_offset_extended_sf: r7 \(\$a3\) at cfa\+64 + DW_CFA_offset_extended_sf: r8 \(\$a4\) at cfa\+72 + DW_CFA_offset_extended_sf: r9 \(\$a5\) at cfa\+80 + DW_CFA_offset_extended_sf: r10 \(\$a6\) at cfa\+88 + DW_CFA_offset_extended_sf: r11 \(\$a7\) at cfa\+96 + DW_CFA_offset_extended_sf: r12 \(\$t0\) at cfa\+104 + DW_CFA_offset_extended_sf: r13 \(\$t1\) at cfa\+112 + DW_CFA_offset_extended_sf: r14 \(\$t2\) at cfa\+120 + DW_CFA_offset_extended_sf: r15 \(\$t3\) at cfa\+128 + DW_CFA_offset_extended_sf: r16 \(\$t4\) at cfa\+136 + DW_CFA_offset_extended_sf: r17 \(\$t5\) at cfa\+144 + DW_CFA_offset_extended_sf: r18 \(\$t6\) at cfa\+152 + DW_CFA_offset_extended_sf: r19 \(\$t7\) at cfa\+160 + DW_CFA_offset_extended_sf: r20 \(\$t8\) at cfa\+168 + DW_CFA_offset_extended_sf: r21 \(\$r21\) at cfa\+176 + DW_CFA_offset_extended_sf: r22 \(\$fp\) at cfa\+184 + DW_CFA_offset_extended_sf: r23 \(\$s0\) at cfa\+192 + DW_CFA_offset_extended_sf: r24 \(\$s1\) at cfa\+200 + DW_CFA_offset_extended_sf: r25 \(\$s2\) at cfa\+208 + DW_CFA_offset_extended_sf: r26 \(\$s3\) at cfa\+216 + DW_CFA_offset_extended_sf: r27 \(\$s4\) at cfa\+224 + DW_CFA_offset_extended_sf: r28 \(\$s5\) at cfa\+232 + DW_CFA_offset_extended_sf: r29 \(\$s6\) at cfa\+240 + DW_CFA_offset_extended_sf: r30 \(\$s7\) at cfa\+248 + DW_CFA_offset_extended_sf: r31 \(\$s8\) at cfa\+256 + DW_CFA_offset_extended_sf: r32 \(\$fa0\) at cfa\+264 + DW_CFA_offset_extended_sf: r33 \(\$fa1\) at cfa\+272 + DW_CFA_offset_extended_sf: r34 \(\$fa2\) at cfa\+280 + DW_CFA_offset_extended_sf: r35 \(\$fa3\) at cfa\+288 + DW_CFA_offset_extended_sf: r36 \(\$fa4\) at cfa\+296 + DW_CFA_offset_extended_sf: r37 \(\$fa5\) at cfa\+304 + DW_CFA_offset_extended_sf: r38 \(\$fa6\) at cfa\+312 + DW_CFA_offset_extended_sf: r39 \(\$fa7\) at cfa\+320 + DW_CFA_offset_extended_sf: r40 \(\$ft0\) at cfa\+328 + DW_CFA_offset_extended_sf: r41 \(\$ft1\) at cfa\+336 + DW_CFA_offset_extended_sf: r42 \(\$ft2\) at cfa\+344 + DW_CFA_offset_extended_sf: r43 \(\$ft3\) at cfa\+352 + DW_CFA_offset_extended_sf: r44 \(\$ft4\) at cfa\+360 + DW_CFA_offset_extended_sf: r45 \(\$ft5\) at cfa\+368 + DW_CFA_offset_extended_sf: r46 \(\$ft6\) at cfa\+376 + DW_CFA_offset_extended_sf: r47 \(\$ft7\) at cfa\+384 + DW_CFA_offset_extended_sf: r48 \(\$ft8\) at cfa\+392 + DW_CFA_offset_extended_sf: r49 \(\$ft9\) at cfa\+400 + DW_CFA_offset_extended_sf: r50 \(\$ft10\) at cfa\+408 + DW_CFA_offset_extended_sf: r51 \(\$ft11\) at cfa\+416 + DW_CFA_offset_extended_sf: r52 \(\$ft12\) at cfa\+424 + DW_CFA_offset_extended_sf: r53 \(\$ft13\) at cfa\+432 + DW_CFA_offset_extended_sf: r54 \(\$ft14\) at cfa\+440 + DW_CFA_offset_extended_sf: r55 \(\$ft15\) at cfa\+448 + DW_CFA_offset_extended_sf: r56 \(\$fs0\) at cfa\+456 + DW_CFA_offset_extended_sf: r57 \(\$fs1\) at cfa\+464 + DW_CFA_offset_extended_sf: r58 \(\$fs2\) at cfa\+472 + DW_CFA_offset_extended_sf: r59 \(\$fs3\) at cfa\+480 + DW_CFA_offset_extended_sf: r60 \(\$fs4\) at cfa\+488 + DW_CFA_offset_extended_sf: r61 \(\$fs5\) at cfa\+496 + DW_CFA_offset_extended_sf: r62 \(\$fs6\) at cfa\+504 + DW_CFA_offset_extended_sf: r63 \(\$fs7\) at cfa\+512 + DW_CFA_offset_extended_sf: r32 \(\$fa0\) at cfa\+264 + DW_CFA_offset_extended_sf: r33 \(\$fa1\) at cfa\+272 + DW_CFA_offset_extended_sf: r34 \(\$fa2\) at cfa\+280 + DW_CFA_offset_extended_sf: r35 \(\$fa3\) at cfa\+288 + DW_CFA_offset_extended_sf: r36 \(\$fa4\) at cfa\+296 + DW_CFA_offset_extended_sf: r37 \(\$fa5\) at cfa\+304 + DW_CFA_offset_extended_sf: r38 \(\$fa6\) at cfa\+312 + DW_CFA_offset_extended_sf: r39 \(\$fa7\) at cfa\+320 + DW_CFA_offset_extended_sf: r40 \(\$ft0\) at cfa\+328 + DW_CFA_offset_extended_sf: r41 \(\$ft1\) at cfa\+336 + DW_CFA_offset_extended_sf: r42 \(\$ft2\) at cfa\+344 + DW_CFA_offset_extended_sf: r43 \(\$ft3\) at cfa\+352 + DW_CFA_offset_extended_sf: r44 \(\$ft4\) at cfa\+360 + DW_CFA_offset_extended_sf: r45 \(\$ft5\) at cfa\+368 + DW_CFA_offset_extended_sf: r46 \(\$ft6\) at cfa\+376 + DW_CFA_offset_extended_sf: r47 \(\$ft7\) at cfa\+384 + DW_CFA_offset_extended_sf: r48 \(\$ft8\) at cfa\+392 + DW_CFA_offset_extended_sf: r49 \(\$ft9\) at cfa\+400 + DW_CFA_offset_extended_sf: r50 \(\$ft10\) at cfa\+408 + DW_CFA_offset_extended_sf: r51 \(\$ft11\) at cfa\+416 + DW_CFA_offset_extended_sf: r52 \(\$ft12\) at cfa\+424 + DW_CFA_offset_extended_sf: r53 \(\$ft13\) at cfa\+432 + DW_CFA_offset_extended_sf: r54 \(\$ft14\) at cfa\+440 + DW_CFA_offset_extended_sf: r55 \(\$ft15\) at cfa\+448 + DW_CFA_offset_extended_sf: r56 \(\$fs0\) at cfa\+456 + DW_CFA_offset_extended_sf: r57 \(\$fs1\) at cfa\+464 + DW_CFA_offset_extended_sf: r58 \(\$fs2\) at cfa\+472 + DW_CFA_offset_extended_sf: r59 \(\$fs3\) at cfa\+480 + DW_CFA_offset_extended_sf: r60 \(\$fs4\) at cfa\+488 + DW_CFA_offset_extended_sf: r61 \(\$fs5\) at cfa\+496 + DW_CFA_offset_extended_sf: r62 \(\$fs6\) at cfa\+504 + DW_CFA_offset_extended_sf: r63 \(\$fs7\) at cfa\+512 + DW_CFA_offset_extended_sf: r32 \(\$fa0\) at cfa\+264 + DW_CFA_offset_extended_sf: r33 \(\$fa1\) at cfa\+272 + DW_CFA_offset_extended_sf: r34 \(\$fa2\) at cfa\+280 + DW_CFA_offset_extended_sf: r35 \(\$fa3\) at cfa\+288 + DW_CFA_offset_extended_sf: r36 \(\$fa4\) at cfa\+296 + DW_CFA_offset_extended_sf: r37 \(\$fa5\) at cfa\+304 + DW_CFA_offset_extended_sf: r38 \(\$fa6\) at cfa\+312 + DW_CFA_offset_extended_sf: r39 \(\$fa7\) at cfa\+320 + DW_CFA_offset_extended_sf: r40 \(\$ft0\) at cfa\+328 + DW_CFA_offset_extended_sf: r41 \(\$ft1\) at cfa\+336 + DW_CFA_offset_extended_sf: r42 \(\$ft2\) at cfa\+344 + DW_CFA_offset_extended_sf: r43 \(\$ft3\) at cfa\+352 + DW_CFA_offset_extended_sf: r44 \(\$ft4\) at cfa\+360 + DW_CFA_offset_extended_sf: r45 \(\$ft5\) at cfa\+368 + DW_CFA_offset_extended_sf: r46 \(\$ft6\) at cfa\+376 + DW_CFA_offset_extended_sf: r47 \(\$ft7\) at cfa\+384 + DW_CFA_offset_extended_sf: r48 \(\$ft8\) at cfa\+392 + DW_CFA_offset_extended_sf: r49 \(\$ft9\) at cfa\+400 + DW_CFA_offset_extended_sf: r50 \(\$ft10\) at cfa\+408 + DW_CFA_offset_extended_sf: r51 \(\$ft11\) at cfa\+416 + DW_CFA_offset_extended_sf: r52 \(\$ft12\) at cfa\+424 + DW_CFA_offset_extended_sf: r53 \(\$ft13\) at cfa\+432 + DW_CFA_offset_extended_sf: r54 \(\$ft14\) at cfa\+440 + DW_CFA_offset_extended_sf: r55 \(\$ft15\) at cfa\+448 + DW_CFA_offset_extended_sf: r56 \(\$fs0\) at cfa\+456 + DW_CFA_offset_extended_sf: r57 \(\$fs1\) at cfa\+464 + DW_CFA_offset_extended_sf: r58 \(\$fs2\) at cfa\+472 + DW_CFA_offset_extended_sf: r59 \(\$fs3\) at cfa\+480 + DW_CFA_offset_extended_sf: r60 \(\$fs4\) at cfa\+488 + DW_CFA_offset_extended_sf: r61 \(\$fs5\) at cfa\+496 + DW_CFA_offset_extended_sf: r62 \(\$fs6\) at cfa\+504 + DW_CFA_offset_extended_sf: r63 \(\$fs7\) at cfa\+512 + DW_CFA_offset_extended_sf: r32 \(\$fa0\) at cfa\+264 + DW_CFA_offset_extended_sf: r33 \(\$fa1\) at cfa\+272 + DW_CFA_offset_extended_sf: r34 \(\$fa2\) at cfa\+280 + DW_CFA_offset_extended_sf: r35 \(\$fa3\) at cfa\+288 + DW_CFA_offset_extended_sf: r36 \(\$fa4\) at cfa\+296 + DW_CFA_offset_extended_sf: r37 \(\$fa5\) at cfa\+304 + DW_CFA_offset_extended_sf: r38 \(\$fa6\) at cfa\+312 + DW_CFA_offset_extended_sf: r39 \(\$fa7\) at cfa\+320 + DW_CFA_offset_extended_sf: r40 \(\$ft0\) at cfa\+328 + DW_CFA_offset_extended_sf: r41 \(\$ft1\) at cfa\+336 + DW_CFA_offset_extended_sf: r42 \(\$ft2\) at cfa\+344 + DW_CFA_offset_extended_sf: r43 \(\$ft3\) at cfa\+352 + DW_CFA_offset_extended_sf: r44 \(\$ft4\) at cfa\+360 + DW_CFA_offset_extended_sf: r45 \(\$ft5\) at cfa\+368 + DW_CFA_offset_extended_sf: r46 \(\$ft6\) at cfa\+376 + DW_CFA_offset_extended_sf: r47 \(\$ft7\) at cfa\+384 + DW_CFA_offset_extended_sf: r48 \(\$ft8\) at cfa\+392 + DW_CFA_offset_extended_sf: r49 \(\$ft9\) at cfa\+400 + DW_CFA_offset_extended_sf: r50 \(\$ft10\) at cfa\+408 + DW_CFA_offset_extended_sf: r51 \(\$ft11\) at cfa\+416 + DW_CFA_offset_extended_sf: r52 \(\$ft12\) at cfa\+424 + DW_CFA_offset_extended_sf: r53 \(\$ft13\) at cfa\+432 + DW_CFA_offset_extended_sf: r54 \(\$ft14\) at cfa\+440 + DW_CFA_offset_extended_sf: r55 \(\$ft15\) at cfa\+448 + DW_CFA_offset_extended_sf: r56 \(\$fs0\) at cfa\+456 + DW_CFA_offset_extended_sf: r57 \(\$fs1\) at cfa\+464 + DW_CFA_offset_extended_sf: r58 \(\$fs2\) at cfa\+472 + DW_CFA_offset_extended_sf: r59 \(\$fs3\) at cfa\+480 + DW_CFA_offset_extended_sf: r60 \(\$fs4\) at cfa\+488 + DW_CFA_offset_extended_sf: r61 \(\$fs5\) at cfa\+496 + DW_CFA_offset_extended_sf: r62 \(\$fs6\) at cfa\+504 + DW_CFA_offset_extended_sf: r63 \(\$fs7\) at cfa\+512 +#... diff --git a/gas/testsuite/gas/loongarch/dwarf-regnum.s b/gas/testsuite/gas/loongarch/dwarf-regnum.s new file mode 100644 index 00000000000..db467b7e0ff --- /dev/null +++ b/gas/testsuite/gas/loongarch/dwarf-regnum.s @@ -0,0 +1,281 @@ +# Check whether CFI directives can access all register names. + .text + .globl _start +_start: + .cfi_startproc + nop + + # ABI GPRs name + .cfi_offset $r0, 8 + .cfi_offset $r1, 16 + .cfi_offset $r2, 24 + .cfi_offset $r3, 32 + .cfi_offset $r4, 40 + .cfi_offset $r5, 48 + .cfi_offset $r6, 56 + .cfi_offset $r7, 64 + .cfi_offset $r8, 72 + .cfi_offset $r9, 80 + .cfi_offset $r10,88 + .cfi_offset $r11,96 + .cfi_offset $r12,104 + .cfi_offset $r13,112 + .cfi_offset $r14,120 + .cfi_offset $r15,128 + .cfi_offset $r16,136 + .cfi_offset $r17,144 + .cfi_offset $r18,152 + .cfi_offset $r19,160 + .cfi_offset $r20,168 + .cfi_offset $r21,176 + .cfi_offset $r22,184 + .cfi_offset $r23,192 + .cfi_offset $r24,200 + .cfi_offset $r25,208 + .cfi_offset $r26,216 + .cfi_offset $r27,224 + .cfi_offset $r28,232 + .cfi_offset $r29,240 + .cfi_offset $r30,248 + .cfi_offset $r31,256 + + # ABI GPRs alias + .cfi_offset $zero,8 + .cfi_offset $ra, 16 + .cfi_offset $tp, 24 + .cfi_offset $sp, 32 + .cfi_offset $a0, 40 + .cfi_offset $a1, 48 + .cfi_offset $a2, 56 + .cfi_offset $a3, 64 + .cfi_offset $a4, 72 + .cfi_offset $a5, 80 + .cfi_offset $a6, 88 + .cfi_offset $a7, 96 + .cfi_offset $t0, 104 + .cfi_offset $t1, 112 + .cfi_offset $t2, 120 + .cfi_offset $t3, 128 + .cfi_offset $t4, 136 + .cfi_offset $t5, 144 + .cfi_offset $t6, 152 + .cfi_offset $t7, 160 + .cfi_offset $t8, 168 + .cfi_offset $r21, 176 + .cfi_offset $fp, 184 + .cfi_offset $s0, 192 + .cfi_offset $s1, 200 + .cfi_offset $s2, 208 + .cfi_offset $s3, 216 + .cfi_offset $s4, 224 + .cfi_offset $s5, 232 + .cfi_offset $s6, 240 + .cfi_offset $s7, 248 + .cfi_offset $s8, 256 + + # numeric GPRs alias + .cfi_offset r0, 8 + .cfi_offset r1, 16 + .cfi_offset r2, 24 + .cfi_offset r3, 32 + .cfi_offset r4, 40 + .cfi_offset r5, 48 + .cfi_offset r6, 56 + .cfi_offset r7, 64 + .cfi_offset r8, 72 + .cfi_offset r9, 80 + .cfi_offset r10,88 + .cfi_offset r11,96 + .cfi_offset r12,104 + .cfi_offset r13,112 + .cfi_offset r14,120 + .cfi_offset r15,128 + .cfi_offset r16,136 + .cfi_offset r17,144 + .cfi_offset r18,152 + .cfi_offset r19,160 + .cfi_offset r20,168 + .cfi_offset r21,176 + .cfi_offset r22,184 + .cfi_offset r23,192 + .cfi_offset r24,200 + .cfi_offset r25,208 + .cfi_offset r26,216 + .cfi_offset r27,224 + .cfi_offset r28,232 + .cfi_offset r29,240 + .cfi_offset r30,248 + .cfi_offset r31,256 + + # without "$" GPRs alias + .cfi_offset zero,8 + .cfi_offset ra, 16 + .cfi_offset tp, 24 + .cfi_offset sp, 32 + .cfi_offset a0, 40 + .cfi_offset a1, 48 + .cfi_offset a2, 56 + .cfi_offset a3, 64 + .cfi_offset a4, 72 + .cfi_offset a5, 80 + .cfi_offset a6, 88 + .cfi_offset a7, 96 + .cfi_offset t0, 104 + .cfi_offset t1, 112 + .cfi_offset t2, 120 + .cfi_offset t3, 128 + .cfi_offset t4, 136 + .cfi_offset t5, 144 + .cfi_offset t6, 152 + .cfi_offset t7, 160 + .cfi_offset t8, 168 + .cfi_offset r21, 176 + .cfi_offset fp, 184 + .cfi_offset s0, 192 + .cfi_offset s1, 200 + .cfi_offset s2, 208 + .cfi_offset s3, 216 + .cfi_offset s4, 224 + .cfi_offset s5, 232 + .cfi_offset s6, 240 + .cfi_offset s7, 248 + .cfi_offset s8, 256 + + # ABI FPRs names + .cfi_offset $f0, 264 + .cfi_offset $f1, 272 + .cfi_offset $f2, 280 + .cfi_offset $f3, 288 + .cfi_offset $f4, 296 + .cfi_offset $f5, 304 + .cfi_offset $f6, 312 + .cfi_offset $f7, 320 + .cfi_offset $f8, 328 + .cfi_offset $f9, 336 + .cfi_offset $f10,344 + .cfi_offset $f11,352 + .cfi_offset $f12,360 + .cfi_offset $f13,368 + .cfi_offset $f14,376 + .cfi_offset $f15,384 + .cfi_offset $f16,392 + .cfi_offset $f17,400 + .cfi_offset $f18,408 + .cfi_offset $f19,416 + .cfi_offset $f20,424 + .cfi_offset $f21,432 + .cfi_offset $f22,440 + .cfi_offset $f23,448 + .cfi_offset $f24,456 + .cfi_offset $f25,464 + .cfi_offset $f26,472 + .cfi_offset $f27,480 + .cfi_offset $f28,488 + .cfi_offset $f29,496 + .cfi_offset $f30,504 + .cfi_offset $f31,512 + + # ABI FPRs alias + .cfi_offset $fa0, 264 + .cfi_offset $fa1, 272 + .cfi_offset $fa2, 280 + .cfi_offset $fa3, 288 + .cfi_offset $fa4, 296 + .cfi_offset $fa5, 304 + .cfi_offset $fa6, 312 + .cfi_offset $fa7, 320 + .cfi_offset $ft0, 328 + .cfi_offset $ft1, 336 + .cfi_offset $ft2,344 + .cfi_offset $ft3,352 + .cfi_offset $ft4,360 + .cfi_offset $ft5,368 + .cfi_offset $ft6,376 + .cfi_offset $ft7,384 + .cfi_offset $ft8,392 + .cfi_offset $ft9,400 + .cfi_offset $ft10,408 + .cfi_offset $ft11,416 + .cfi_offset $ft12,424 + .cfi_offset $ft13,432 + .cfi_offset $ft14,440 + .cfi_offset $ft15,448 + .cfi_offset $fs0,456 + .cfi_offset $fs1,464 + .cfi_offset $fs2,472 + .cfi_offset $fs3,480 + .cfi_offset $fs4,488 + .cfi_offset $fs5,496 + .cfi_offset $fs6,504 + .cfi_offset $fs7,512 + + # numeric FPRs names + .cfi_offset f0, 264 + .cfi_offset f1, 272 + .cfi_offset f2, 280 + .cfi_offset f3, 288 + .cfi_offset f4, 296 + .cfi_offset f5, 304 + .cfi_offset f6, 312 + .cfi_offset f7, 320 + .cfi_offset f8, 328 + .cfi_offset f9, 336 + .cfi_offset f10,344 + .cfi_offset f11,352 + .cfi_offset f12,360 + .cfi_offset f13,368 + .cfi_offset f14,376 + .cfi_offset f15,384 + .cfi_offset f16,392 + .cfi_offset f17,400 + .cfi_offset f18,408 + .cfi_offset f19,416 + .cfi_offset f20,424 + .cfi_offset f21,432 + .cfi_offset f22,440 + .cfi_offset f23,448 + .cfi_offset f24,456 + .cfi_offset f25,464 + .cfi_offset f26,472 + .cfi_offset f27,480 + .cfi_offset f28,488 + .cfi_offset f29,496 + .cfi_offset f30,504 + .cfi_offset f31,512 + + # without "$" FPRs alias + .cfi_offset fa0, 264 + .cfi_offset fa1, 272 + .cfi_offset fa2, 280 + .cfi_offset fa3, 288 + .cfi_offset fa4, 296 + .cfi_offset fa5, 304 + .cfi_offset fa6, 312 + .cfi_offset fa7, 320 + .cfi_offset ft0, 328 + .cfi_offset ft1, 336 + .cfi_offset ft2,344 + .cfi_offset ft3,352 + .cfi_offset ft4,360 + .cfi_offset ft5,368 + .cfi_offset ft6,376 + .cfi_offset ft7,384 + .cfi_offset ft8,392 + .cfi_offset ft9,400 + .cfi_offset ft10,408 + .cfi_offset ft11,416 + .cfi_offset ft12,424 + .cfi_offset ft13,432 + .cfi_offset ft14,440 + .cfi_offset ft15,448 + .cfi_offset fs0,456 + .cfi_offset fs1,464 + .cfi_offset fs2,472 + .cfi_offset fs3,480 + .cfi_offset fs4,488 + .cfi_offset fs5,496 + .cfi_offset fs6,504 + .cfi_offset fs7,512 + + nop + .cfi_endproc diff --git a/include/opcode/loongarch.h b/include/opcode/loongarch.h index 5425eaf76e0..493fe9bcce3 100644 --- a/include/opcode/loongarch.h +++ b/include/opcode/loongarch.h @@ -267,6 +267,10 @@ dec2 : [1-9][0-9]? extern const char *const loongarch_cr_normal_name[4]; extern const char *const loongarch_v_normal_name[32]; extern const char *const loongarch_x_normal_name[32]; + extern const char *const loongarch_r_cfi_name[32]; + extern const char *const loongarch_r_cfi_name_alias[32]; + extern const char *const loongarch_f_cfi_name[32]; + extern const char *const loongarch_f_cfi_name_alias[32]; extern struct loongarch_ase loongarch_ASEs[]; diff --git a/opcodes/loongarch-opc.c b/opcodes/loongarch-opc.c index 0ba745f7d0a..6c2b476a161 100644 --- a/opcodes/loongarch-opc.c +++ b/opcodes/loongarch-opc.c @@ -126,6 +126,38 @@ const char *const loongarch_x_normal_name[32] = "$xr24", "$xr25", "$xr26", "$xr27", "$xr28", "$xr29", "$xr30", "$xr31", }; +const char *const loongarch_r_cfi_name[32] = +{ + "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", + "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", +}; + +const char *const loongarch_r_cfi_name_alias[32] = +{ + "zero", "ra", "tp", "sp", "a0", "a1", "a2", "a3", + "a4", "a5", "a6", "a7", "t0", "t1", "t2", "t3", + "t4", "t5", "t6", "t7", "t8", "r21","fp", "s0", + "s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8", +}; + +const char *const loongarch_f_cfi_name[32] = +{ + "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", + "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", + "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", + "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", +}; + +const char *const loongarch_f_cfi_name_alias[32] = +{ + "fa0", "fa1", "fa2", "fa3", "fa4", "fa5", "fa6", "fa7", + "ft0", "ft1", "ft2", "ft3", "ft4", "ft5", "ft6", "ft7", + "ft8", "ft9", "ft10", "ft11", "ft12", "ft13", "ft14", "ft15", + "fs0", "fs1", "fs2", "fs3", "fs4", "fs5", "fs6", "fs7", +}; + /* Can not use xx_pa for abs. */ /* For LoongArch32 abs. */