public inbox for gdb-cvs@sourceware.org help / color / mirror / Atom feed
From: Tiezhu Yang <yangtiezhu@sourceware.org> To: gdb-cvs@sourceware.org Subject: [binutils-gdb] gdb: LoongArch: prepend tramp frame unwinder for signal Date: Wed, 6 Apr 2022 14:35:08 +0000 (GMT) [thread overview] Message-ID: <20220406143508.53BD03864858@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=7fb56b98937a2feef5a3e12d8b00506ff4d132be commit 7fb56b98937a2feef5a3e12d8b00506ff4d132be Author: Tiezhu Yang <yangtiezhu@loongson.cn> Date: Thu Mar 31 19:56:51 2022 +0800 gdb: LoongArch: prepend tramp frame unwinder for signal Implement the "init" method of struct tramp_frame to prepend tramp frame unwinder for signal on LoongArch. With this patch, the following failed testcases can be fixed: FAIL: gdb.base/annota1.exp: backtrace @ signal handler (timeout) FAIL: gdb.base/annota3.exp: backtrace @ signal handler (pattern 2) Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> Diff: --- gdb/loongarch-linux-tdep.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/gdb/loongarch-linux-tdep.c b/gdb/loongarch-linux-tdep.c index 6c040c3c385..7e219c4b9a0 100644 --- a/gdb/loongarch-linux-tdep.c +++ b/gdb/loongarch-linux-tdep.c @@ -25,6 +25,8 @@ #include "loongarch-tdep.h" #include "solib-svr4.h" #include "target-descriptions.h" +#include "trad-frame.h" +#include "tramp-frame.h" /* Unpack an elf_gregset_t into GDB's register cache. */ @@ -117,6 +119,50 @@ const struct regset loongarch_gregset = loongarch_fill_gregset, }; +/* Implement the "init" method of struct tramp_frame. */ + +#define LOONGARCH_RT_SIGFRAME_UCONTEXT_OFFSET 128 +#define LOONGARCH_UCONTEXT_SIGCONTEXT_OFFSET 176 + +static void +loongarch_linux_rt_sigframe_init (const struct tramp_frame *self, + struct frame_info *this_frame, + struct trad_frame_cache *this_cache, + CORE_ADDR func) +{ + struct gdbarch *gdbarch = get_frame_arch (this_frame); + loongarch_gdbarch_tdep *tdep = (loongarch_gdbarch_tdep *) gdbarch_tdep (gdbarch); + auto regs = tdep->regs; + + CORE_ADDR frame_sp = get_frame_sp (this_frame); + CORE_ADDR sigcontext_base = (frame_sp + LOONGARCH_RT_SIGFRAME_UCONTEXT_OFFSET + + LOONGARCH_UCONTEXT_SIGCONTEXT_OFFSET); + + trad_frame_set_reg_addr (this_cache, regs.pc, sigcontext_base); + for (int i = 0; i < 32; i++) + trad_frame_set_reg_addr (this_cache, regs.r + i, sigcontext_base + 8 + i * 8); + + trad_frame_set_id (this_cache, frame_id_build (frame_sp, func)); +} + +/* li.w a7, __NR_rt_sigreturn */ +#define LOONGARCH_INST_LIW_A7_RT_SIGRETURN 0x03822c0b +/* syscall 0 */ +#define LOONGARCH_INST_SYSCALL 0x002b0000 + +static const struct tramp_frame loongarch_linux_rt_sigframe = +{ + SIGTRAMP_FRAME, + 4, + { + { LOONGARCH_INST_LIW_A7_RT_SIGRETURN, ULONGEST_MAX }, + { LOONGARCH_INST_SYSCALL, ULONGEST_MAX }, + { TRAMP_SENTINEL_INSN, ULONGEST_MAX } + }, + loongarch_linux_rt_sigframe_init, + NULL +}; + /* Initialize LoongArch Linux ABI info. */ static void @@ -134,8 +180,12 @@ loongarch_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) /* GNU/Linux uses the dynamic linker included in the GNU C Library. */ set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver); + /* Enable TLS support. */ set_gdbarch_fetch_tls_load_module_address (gdbarch, svr4_fetch_objfile_link_map); + + /* Prepend tramp frame unwinder for signal. */ + tramp_frame_prepend_unwinder (gdbarch, &loongarch_linux_rt_sigframe); } /* Initialize LoongArch Linux target support. */
reply other threads:[~2022-04-06 14:35 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220406143508.53BD03864858@sourceware.org \ --to=yangtiezhu@sourceware.org \ --cc=gdb-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).