aboutsummaryrefslogtreecommitdiff
path: root/gdb/loongarch-tdep.c
diff options
context:
space:
mode:
authorFeiyang Chen <chenfeiyang@loongson.cn>2024-01-25 16:32:36 +0800
committerTiezhu Yang <yangtiezhu@loongson.cn>2024-02-06 18:40:19 +0800
commite4d74c01e77365f1327e4e567e7579cdd3bf74f6 (patch)
tree57a80ffa2ea61b4754b9d71f89fcee012966bf05 /gdb/loongarch-tdep.c
parent1e9569f383a3d5a88ee07d0c2401bd95613c222e (diff)
downloadgdb-e4d74c01e77365f1327e4e567e7579cdd3bf74f6.zip
gdb-e4d74c01e77365f1327e4e567e7579cdd3bf74f6.tar.gz
gdb-e4d74c01e77365f1327e4e567e7579cdd3bf74f6.tar.bz2
gdb: LoongArch: Add LBT extension support
Loongson Binary Translation (LBT) is used to accelerate binary translation, which contains 4 scratch registers (scr0 to scr3), x86/ARM eflags (eflags) and x87 fpu stack pointer (ftop). This patch support gdb to fetch/store these registers. Signed-off-by: Feiyang Chen <chenfeiyang@loongson.cn> # Framework Signed-off-by: Binbin Zhou <zhoubinbin@loongson.cn> # Detail Optimizes Signed-off-by: Hui Li <lihui@loongson.cn> # Error Fixes Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Diffstat (limited to 'gdb/loongarch-tdep.c')
-rw-r--r--gdb/loongarch-tdep.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/gdb/loongarch-tdep.c b/gdb/loongarch-tdep.c
index f56e80f..0f4622a 100644
--- a/gdb/loongarch-tdep.c
+++ b/gdb/loongarch-tdep.c
@@ -1743,6 +1743,24 @@ loongarch_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
if (!valid_p)
return nullptr;
+ const struct tdesc_feature *feature_lbt
+ = tdesc_find_feature (tdesc, "org.gnu.gdb.loongarch.lbt");
+ if (feature_lbt == nullptr)
+ return nullptr;
+
+ /* Validate the description provides the lbt registers and
+ allocate their numbers. */
+ regnum = LOONGARCH_FIRST_SCR_REGNUM;
+ for (int i = 0; i < LOONGARCH_LINUX_NUM_SCR; i++)
+ valid_p &= tdesc_numbered_register (feature_lbt, tdesc_data.get (), regnum++,
+ loongarch_cr_normal_name[i] + 1);
+ valid_p &= tdesc_numbered_register (feature_lbt, tdesc_data.get (), regnum++,
+ "eflags");
+ valid_p &= tdesc_numbered_register (feature_lbt, tdesc_data.get (), regnum++,
+ "ftop");
+ if (!valid_p)
+ return nullptr;
+
/* LoongArch code is always little-endian. */
info.byte_order_for_code = BFD_ENDIAN_LITTLE;