From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from out28-51.mail.aliyun.com (out28-51.mail.aliyun.com [115.124.28.51]) by sourceware.org (Postfix) with ESMTPS id 9EC8B3858434 for ; Wed, 23 Mar 2022 12:27:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 9EC8B3858434 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=c-sky.com Authentication-Results: sourceware.org; spf=none smtp.mailfrom=c-sky.com X-Alimail-AntiSpam: AC=CONTINUE; BC=0.259811|-1; CH=green; DM=|CONTINUE|false|; DS=CONTINUE|ham_system_inform|0.201387-0.00126628-0.797347; FP=0|0|0|0|0|-1|-1|-1; HT=ay29a033018047206; MF=jiangshuai_li@c-sky.com; NM=1; PH=DS; RN=2; RT=2; SR=0; TI=SMTPD_---.NAtiNCR_1648038425; Received: from lijsh-VirtualBox.hz.ali.com(mailfrom:jiangshuai_li@c-sky.com fp:SMTPD_---.NAtiNCR_1648038425) by smtp.aliyun-inc.com(33.45.6.129); Wed, 23 Mar 2022 20:27:05 +0800 From: Jiangshuai Li To: gdb-patches@sourceware.org Cc: Jiangshuai Li Subject: [PATCH v2] gdb:csky save fpu and vdsp info to struct csky_gdbarch_tdep Date: Wed, 23 Mar 2022 20:26:16 +0800 Message-Id: <20220323122616.6041-1-jiangshuai_li@c-sky.com> X-Mailer: git-send-email 2.17.1 X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Mar 2022 12:27:12 -0000 First, add three variables fpu_abi, fpu_hardfp and vdsp_version to csky_gdbarch_tdep. They will be initialized from info.abfd in cskg_gdbarch_init. Now, they are just used to find a candidate among the list of pre-declared architectures Later, they will be used in gdbarch_return_value and gdbarch_push_dummy_call for funtions described below: fpu_abi: to check if the bfd is using VAL_CSKY_FPU_ABI_HARD or VAL_CSKY_FPU_ABI_SOFT fpu_hardfp: to check if the bfd is using VAL_CSKY_FPU_HARDFP_SINGLE or VAL_CSKY_FPU_HARDFP_DOUBLE vdsp_version: to check if a function is returned with CSKY_VRET_REGNUM --- gdb/csky-tdep.c | 42 +++++++++++++++++++++++++++++++++++++++--- gdb/csky-tdep.h | 5 ++++- 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/gdb/csky-tdep.c b/gdb/csky-tdep.c index cba0065fa53..04f558cf14b 100644 --- a/gdb/csky-tdep.c +++ b/gdb/csky-tdep.c @@ -2157,16 +2157,52 @@ static struct gdbarch * csky_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) { struct gdbarch *gdbarch; + /* Analyze info.abfd. */ + unsigned int fpu_abi = 0; + unsigned int vdsp_version = 0; + unsigned int fpu_hardfp = 0; + + /* When the type of bfd file is srec(or any files are not elf), + the E_FLAGS will be not credible. */ + if (info.abfd != NULL && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour) + { + /* Get FPU, VDSP build options. */ + fpu_abi = bfd_elf_get_obj_attr_int (info.abfd, + OBJ_ATTR_PROC, + Tag_CSKY_FPU_ABI); + vdsp_version = bfd_elf_get_obj_attr_int (info.abfd, + OBJ_ATTR_PROC, + Tag_CSKY_VDSP_VERSION); + fpu_hardfp = bfd_elf_get_obj_attr_int (info.abfd, + OBJ_ATTR_PROC, + Tag_CSKY_FPU_HARDFP); + } /* Find a candidate among the list of pre-declared architectures. */ - arches = gdbarch_list_lookup_by_info (arches, &info); - if (arches != NULL) - return arches->gdbarch; + for (arches = gdbarch_list_lookup_by_info (arches, &info); + arches != NULL; + arches = gdbarch_list_lookup_by_info (arches->next, &info)) + { + csky_gdbarch_tdep *tdep + = (csky_gdbarch_tdep *) gdbarch_tdep (arches->gdbarch); + if (fpu_abi != tdep->fpu_abi) + continue; + if (vdsp_version != tdep->vdsp_version) + continue; + if (fpu_hardfp != tdep->fpu_hardfp) + continue; + + /* Found a match. */ + return arches->gdbarch; + } /* None found, create a new architecture from the information provided. */ csky_gdbarch_tdep *tdep = new csky_gdbarch_tdep; gdbarch = gdbarch_alloc (&info, tdep); + tdep->fpu_abi = fpu_abi; + tdep->vdsp_version = vdsp_version; + tdep->fpu_hardfp = fpu_hardfp; /* Target data types. */ set_gdbarch_ptr_bit (gdbarch, 32); diff --git a/gdb/csky-tdep.h b/gdb/csky-tdep.h index 7898e0d325b..d0e5fc09270 100644 --- a/gdb/csky-tdep.h +++ b/gdb/csky-tdep.h @@ -33,7 +33,10 @@ enum lr_type_t /* Target-dependent structure in gdbarch. */ struct csky_gdbarch_tdep : gdbarch_tdep { - /* This is Unused. */ + /* Save FPU, VDSP ABI. */ + unsigned int fpu_abi; + unsigned int fpu_hardfp; + unsigned int vdsp_version; }; /* Instruction sizes. */ -- 2.17.1