diff options
author | Feiyang Chen <chenfeiyang@loongson.cn> | 2024-01-25 16:32:36 +0800 |
---|---|---|
committer | Tiezhu Yang <yangtiezhu@loongson.cn> | 2024-02-06 18:40:19 +0800 |
commit | e4d74c01e77365f1327e4e567e7579cdd3bf74f6 (patch) | |
tree | 57a80ffa2ea61b4754b9d71f89fcee012966bf05 /gdb/loongarch-tdep.c | |
parent | 1e9569f383a3d5a88ee07d0c2401bd95613c222e (diff) | |
download | gdb-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.c | 18 |
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; |