From d412e69677c6ca145ea8f5ff8c61a22952cb0855 Mon Sep 17 00:00:00 2001 From: Rainer Orth Date: Thu, 25 Jun 2020 13:43:46 +0200 Subject: Move common handlers to sol2_init_abi There's some overlap and duplication between 32 and 64-bit Solaris/SPARC and x86 tdep files, in particular sol2_core_pid_to_str *_sol2_sigtramp_p sol2_skip_solib_resolver *_sol2_static_transform_name (forgotten on amd64) set_gdbarch_sofun_address_maybe_missing (likewise) This patch avoids this by centralizing common code in sol2-tdep.c. While sparc_sol2_pc_in_sigtramp and sparc_sol2_static_transform_name were declared in the shared sparc-tdep.h, they were only used in Solaris files. Tested on amd64-pc-solaris2.11, i386-pc-solaris2.11, sparcv9-sun-solaris2.11, and sparc-sun-solaris2.11, and sparc64-unknown-linux-gnu. * amd64-sol2-tdep.c (amd64_sol2_sigtramp_p): Remove. (amd64_sol2_init_abi): Use sol2_sigtramp_p. Call sol2_init_abi. Remove calls to set_gdbarch_skip_solib_resolver, set_gdbarch_core_pid_to_str. * i386-sol2-tdep.c (i386_sol2_sigtramp_p): Remove. (i386_sol2_static_transform_name): Remove. (i386_sol2_init_abi): Call sol2_init_abi. Remove calls to set_gdbarch_sofun_address_maybe_missing, set_gdbarch_static_transform_name, set_gdbarch_skip_solib_resolver, set_gdbarch_core_pid_to_str. Use sol2_sigtramp_p. * sol2-tdep.c (sol2_pc_in_sigtramp): New function. (sol2_sigtramp_p): New function. (sol2_static_transform_name): New function. (sol2_skip_solib_resolver, sol2_core_pid_to_str): Make static. (sol2_init_abi): New function. * sol2-tdep.h (sol2_sigtramp_p, sol2_init_abi): Declare. (sol2_skip_solib_resolver, sol2_core_pid_to_str): Remove. * sparc-sol2-tdep.c (sparc_sol2_pc_in_sigtramp): Remove. (sparc32_sol2_sigtramp_frame_sniffer): Just call sol2_sigtramp_p. (sparc_sol2_static_transform_name): Remove. (sparc32_sol2_init_abi): Call sol2_init_abi. Remove calls to set_gdbarch_sofun_address_maybe_missing, set_gdbarch_static_transform_name, set_gdbarch_skip_solib_resolver, set_gdbarch_core_pid_to_str. * sparc-tdep.h (sparc_sol2_pc_in_sigtramp) (sparc_sol2_static_transform_name): Remove * sparc64-sol2-tdep.c (sparc64_sol2_sigtramp_frame_sniffer): Just call sol2_sigtramp_p. (sparc64_sol2_init_abi): Call sol2_init_abi. Remove calls to set_gdbarch_sofun_address_maybe_missing, set_gdbarch_static_transform_name, set_gdbarch_skip_solib_resolver, set_gdbarch_core_pid_to_str. --- gdb/amd64-sol2-tdep.c | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) (limited to 'gdb/amd64-sol2-tdep.c') diff --git a/gdb/amd64-sol2-tdep.c b/gdb/amd64-sol2-tdep.c index 8d8600b..f1eba81 100644 --- a/gdb/amd64-sol2-tdep.c +++ b/gdb/amd64-sol2-tdep.c @@ -63,21 +63,6 @@ static int amd64_sol2_gregset_reg_offset[] = { }; -/* Return whether THIS_FRAME corresponds to a Solaris sigtramp - routine. */ - -static int -amd64_sol2_sigtramp_p (struct frame_info *this_frame) -{ - CORE_ADDR pc = get_frame_pc (this_frame); - const char *name; - - find_pc_partial_function (pc, &name, NULL, NULL); - return (name && (strcmp ("sigacthandler", name) == 0 - || strcmp (name, "ucbsigvechandler") == 0 - || strcmp (name, "__sighndlr") == 0)); -} - /* Solaris doesn't have a 'struct sigcontext', but it does have a 'mcontext_t' that contains the saved set of machine registers. */ @@ -104,18 +89,16 @@ amd64_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) amd64_init_abi (info, gdbarch, amd64_target_description (X86_XSTATE_SSE_MASK, true)); - tdep->sigtramp_p = amd64_sol2_sigtramp_p; + sol2_init_abi (info, gdbarch); + + tdep->sigtramp_p = sol2_sigtramp_p; tdep->sigcontext_addr = amd64_sol2_mcontext_addr; tdep->sc_reg_offset = tdep->gregset_reg_offset; tdep->sc_num_regs = tdep->gregset_num_regs; /* Solaris uses SVR4-style shared libraries. */ - set_gdbarch_skip_solib_resolver (gdbarch, sol2_skip_solib_resolver); set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); - - /* How to print LWP PTIDs from core files. */ - set_gdbarch_core_pid_to_str (gdbarch, sol2_core_pid_to_str); } void _initialize_amd64_sol2_tdep (); -- cgit v1.1