aboutsummaryrefslogtreecommitdiff
path: root/gdb/sparc-sol2-tdep.c
diff options
context:
space:
mode:
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>2020-06-25 13:43:46 +0200
committerRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>2020-06-25 13:43:46 +0200
commitd412e69677c6ca145ea8f5ff8c61a22952cb0855 (patch)
tree85fb98a2122dfff9a1ff8602d140735e32fe1c5c /gdb/sparc-sol2-tdep.c
parent42cc83080dee2c23635130c11b3f71f1ca1f5871 (diff)
downloadgdb-d412e69677c6ca145ea8f5ff8c61a22952cb0855.zip
gdb-d412e69677c6ca145ea8f5ff8c61a22952cb0855.tar.gz
gdb-d412e69677c6ca145ea8f5ff8c61a22952cb0855.tar.bz2
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.
Diffstat (limited to 'gdb/sparc-sol2-tdep.c')
-rw-r--r--gdb/sparc-sol2-tdep.c77
1 files changed, 2 insertions, 75 deletions
diff --git a/gdb/sparc-sol2-tdep.c b/gdb/sparc-sol2-tdep.c
index 2df66d5..dfd6e34 100644
--- a/gdb/sparc-sol2-tdep.c
+++ b/gdb/sparc-sol2-tdep.c
@@ -99,30 +99,6 @@ static const struct regset sparc32_sol2_fpregset =
};
-/* The Solaris signal trampolines reside in libc. For normal signals,
- the function `sigacthandler' is used. This signal trampoline will
- call the signal handler using the System V calling convention,
- where the third argument is a pointer to an instance of
- `ucontext_t', which has a member `uc_mcontext' that contains the
- saved registers. Incidentally, the kernel passes the `ucontext_t'
- pointer as the third argument of the signal trampoline too, and
- `sigacthandler' simply passes it on. However, if you link your
- program with "-L/usr/ucblib -R/usr/ucblib -lucb", the function
- `ucbsigvechandler' will be used, which invokes the using the BSD
- convention, where the third argument is a pointer to an instance of
- `struct sigcontext'. It is the `ucbsigvechandler' function that
- converts the `ucontext_t' to a `sigcontext', and back. Unless the
- signal handler modifies the `struct sigcontext' we can safely
- ignore this. */
-
-int
-sparc_sol2_pc_in_sigtramp (CORE_ADDR pc, const char *name)
-{
- return (name && (strcmp (name, "sigacthandler") == 0
- || strcmp (name, "ucbsigvechandler") == 0
- || strcmp (name, "__sighndlr") == 0));
-}
-
static struct sparc_frame_cache *
sparc32_sol2_sigtramp_frame_cache (struct frame_info *this_frame,
void **this_cache)
@@ -201,14 +177,7 @@ sparc32_sol2_sigtramp_frame_sniffer (const struct frame_unwind *self,
struct frame_info *this_frame,
void **this_cache)
{
- CORE_ADDR pc = get_frame_pc (this_frame);
- const char *name;
-
- find_pc_partial_function (pc, &name, NULL, NULL);
- if (sparc_sol2_pc_in_sigtramp (pc, name))
- return 1;
-
- return 0;
+ return sol2_sigtramp_p (this_frame);
}
static const struct frame_unwind sparc32_sol2_sigtramp_frame_unwind =
@@ -221,36 +190,6 @@ static const struct frame_unwind sparc32_sol2_sigtramp_frame_unwind =
sparc32_sol2_sigtramp_frame_sniffer
};
-/* Unglobalize NAME. */
-
-const char *
-sparc_sol2_static_transform_name (const char *name)
-{
- /* The Sun compilers (Sun ONE Studio, Forte Developer, Sun WorkShop,
- SunPRO) convert file static variables into global values, a
- process known as globalization. In order to do this, the
- compiler will create a unique prefix and prepend it to each file
- static variable. For static variables within a function, this
- globalization prefix is followed by the function name (nested
- static variables within a function are supposed to generate a
- warning message, and are left alone). The procedure is
- documented in the Stabs Interface Manual, which is distributed
- with the compilers, although version 4.0 of the manual seems to
- be incorrect in some places, at least for SPARC. The
- globalization prefix is encoded into an N_OPT stab, with the form
- "G=<prefix>". The globalization prefix always seems to start
- with a dollar sign '$'; a dot '.' is used as a separator. So we
- simply strip everything up until the last dot. */
-
- if (name[0] == '$')
- {
- const char *p = strrchr (name, '.');
- if (p)
- return p + 1;
- }
-
- return name;
-}
void
@@ -264,19 +203,10 @@ sparc32_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
tdep->fpregset = &sparc32_sol2_fpregset;
tdep->sizeof_fpregset = 400;
- /* The Sun compilers (Sun ONE Studio, Forte Developer, Sun WorkShop, SunPRO)
- compiler puts out 0 instead of the address in N_SO stabs. Starting with
- SunPRO 3.0, the compiler does this for N_FUN stabs too. */
- set_gdbarch_sofun_address_maybe_missing (gdbarch, 1);
-
- /* The Sun compilers also do "globalization"; see the comment in
- sparc_sol2_static_transform_name for more information. */
- set_gdbarch_static_transform_name
- (gdbarch, sparc_sol2_static_transform_name);
+ sol2_init_abi (info, gdbarch);
/* Solaris has SVR4-style shared libraries... */
set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
- set_gdbarch_skip_solib_resolver (gdbarch, sol2_skip_solib_resolver);
set_solib_svr4_fetch_link_map_offsets
(gdbarch, svr4_ilp32_fetch_link_map_offsets);
@@ -288,9 +218,6 @@ sparc32_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
set_gdbarch_software_single_step (gdbarch, NULL);
frame_unwind_append_unwinder (gdbarch, &sparc32_sol2_sigtramp_frame_unwind);
-
- /* How to print LWP PTIDs from core files. */
- set_gdbarch_core_pid_to_str (gdbarch, sol2_core_pid_to_str);
}
void _initialize_sparc_sol2_tdep ();