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. However, I just discovered that there are two targets that would break with this patch: both sparc-*-linux* and sparc64-*-linux* include sparc-sol2-tdep.o and sparc64-sol2-tdep.o in configure.tgt. With the new call to sol2_init_abi which only lives in sol2-tdep.o, gdb would fail to link. I have no idea what business they have with Solaris-specific files: I suspect that's to allow debugging of Solaris/SPARC binaries (i.e. GDB_OSABI_SOLARIS). What should I do about this? Maybe I also could include sol2-tdep.o on Linux/SPARC, but is this TRT? AFAICS those files received only mechanical changes over the last two years (haven't looked further), and I have no way of testing changes. Tested on amd64-pc-solaris2.11, i386-pc-solaris2.11, sparcv9-sun-solaris2.11, and sparc-sun-solaris2.11. While those patches only/mostly affect Solaris-specific code, I have some questions: * Two settings above (static_transform_name, sofun_address_maybe_missing) only apply to quirks of stabs. The first is completely Solaris-specific (or rather specific to the Studio compilers) and I didn't do any real testing here. Studio cc has deprecated stabs support in the 12.4 release back in 2015, gcc has defaulted to DWARF-2 on Solaris 7+ since 2004, so maybe the whole static_transform_name code can go? The second is also called in i386-linux-tdep.c and rs6000-tdep.c and I don't know enough about this to say what to do here. * Beyond that, maybe it's time to think about deprecating Stabs support in general. There has been some discussion on the GCC side https://gcc.gnu.org/ml/gcc-patches/2017-07/msg01297.html but nothing happened yet. * When running gdb_ari.sh on the changed files, I got some warnings: ./sol2-tdep.c:156: warning: gdbarch: Call to set_gdbarch_sofun_address_maybe_missing ./sol2-tdep.c:160: warning: gdbarch: Call to set_gdbarch_static_transform_name ./sol2-tdep.c:163: warning: gdbarch: Call to set_gdbarch_skip_solib_resolver ./sol2-tdep.c:166: warning: gdbarch: Call to set_gdbarch_core_pid_to_str ./sparc64-sol2-tdep.c:216: warning: gdbarch: Call to set_gdbarch_skip_trampoline_code ./sparc64-sol2-tdep.c:225: warning: gdbarch: Call to set_gdbarch_software_single_step However, all of those calls occur all over the code. What's worse, ARI doesn't give any indication what's the correct way instead. Thanks. Rainer -- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University 2018-06-27 Rainer Orth * 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.