Move common handlers to sol2_init_abi
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Thu, 25 Jun 2020 11:43:46 +0000 (13:43 +0200)
committerRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Thu, 25 Jun 2020 11:43:46 +0000 (13:43 +0200)
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/ChangeLog
gdb/amd64-sol2-tdep.c
gdb/i386-sol2-tdep.c
gdb/sol2-tdep.c
gdb/sol2-tdep.h
gdb/sparc-sol2-tdep.c
gdb/sparc-tdep.h
gdb/sparc64-sol2-tdep.c

index 12ef02bc997d4e7810f5829dac17a597b521d37d..0799ec3a5c83231f136f249c99b7d590b1bf0b6f 100644 (file)
@@ -1,3 +1,41 @@
+2020-06-25  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * 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.
+
 2020-06-24  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
 
        * symfile-add-flags.h: New flag SYMFILE_ALWAYS_CONFIRM.
index 8d8600b2cad8c0b298af4b129fae6c65e25e07c7..f1eba8113bbbece7d68ef007f70a4076693435dd 100644 (file)
@@ -63,21 +63,6 @@ static int amd64_sol2_gregset_reg_offset[] = {
 };
 \f
 
-/* 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 ();
index 1980485cd4db3684bcad75ed65a956e104a8f5b7..0d8eb40119ba327cd39691ac28eea902a7030acf 100644 (file)
@@ -46,21 +46,6 @@ static int i386_sol2_gregset_reg_offset[] =
   0 * 4                                /* %gs */
 };
 
-/* Return whether THIS_FRAME corresponds to a Solaris sigtramp
-   routine.  */
-
-static int
-i386_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.  */
 
@@ -75,30 +60,6 @@ i386_sol2_mcontext_addr (struct frame_info *this_frame)
   return ucontext_addr + 36;
 }
 
-/* SunPRO encodes the static variables.  This is not related to C++
-   mangling, it is done for C too.  */
-
-static const char *
-i386_sol2_static_transform_name (const char *name)
-{
-  if (name[0] == '.')
-    {
-      const char *p;
-
-      /* For file-local statics there will be a period, a bunch of
-         junk (the contents of which match a string given in the
-         N_OPT), a period and the name.  For function-local statics
-         there will be a bunch of junk (which seems to change the
-         second character from 'A' to 'B'), a period, the name of the
-         function, and the name.  So just skip everything before the
-         last period.  */
-      p = strrchr (name, '.');
-      if (p != NULL)
-        name = p + 1;
-    }
-  return name;
-}
-
 /* Solaris 2.  */
 
 static void
@@ -109,12 +70,7 @@ i386_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   /* Solaris is SVR4-based.  */
   i386_svr4_init_abi (info, gdbarch);
 
-  /* The SunPRO compiler puts out 0 instead of the address in N_SO symbols,
-     and for SunPRO 3.0, N_FUN symbols too.  */
-  set_gdbarch_sofun_address_maybe_missing (gdbarch, 1);
-
-  /* Handle SunPRO encoding of static symbols.  */
-  set_gdbarch_static_transform_name (gdbarch, i386_sol2_static_transform_name);
+  sol2_init_abi (info, gdbarch);
 
   /* Solaris reserves space for its FPU emulator in `fpregset_t'.
      There is also some space reserved for the registers of a Weitek
@@ -125,18 +81,14 @@ i386_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   tdep->sizeof_fpregset = 380;
 
   /* Signal trampolines are slightly different from SVR4.  */
-  tdep->sigtramp_p = i386_sol2_sigtramp_p;
+  tdep->sigtramp_p = sol2_sigtramp_p;
   tdep->sigcontext_addr = i386_sol2_mcontext_addr;
   tdep->sc_reg_offset = tdep->gregset_reg_offset;
   tdep->sc_num_regs = tdep->gregset_num_regs;
 
   /* Solaris has SVR4-style shared libraries.  */
-  set_gdbarch_skip_solib_resolver (gdbarch, sol2_skip_solib_resolver);
   set_solib_svr4_fetch_link_map_offsets
     (gdbarch, svr4_ilp32_fetch_link_map_offsets);
-
-  /* How to print LWP PTIDs from core files.  */
-  set_gdbarch_core_pid_to_str (gdbarch, sol2_core_pid_to_str);
 }
 \f
 
index 03b510c9adedbbbad25a6ba95d3190cefaff04ba..179c8aeea5758e98dd8273f9bebfad0b274ad705 100644 (file)
 
 #include "sol2-tdep.h"
 
-CORE_ADDR
+/* 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.  */
+
+static int
+sol2_pc_in_sigtramp (CORE_ADDR pc, const char *name)
+{
+  return (name && (strcmp (name, "sigacthandler") == 0
+                  || strcmp (name, "ucbsigvechandler") == 0
+                  || strcmp (name, "__sighndlr") == 0));
+}
+
+/* Return whether THIS_FRAME corresponds to a Solaris sigtramp routine.  */
+
+int
+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 sol2_pc_in_sigtramp (pc, name);
+}
+
+/* Unglobalize NAME.  */
+
+static const char *
+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 '$' (sparc) resp. a dot '.' (x86); a dot '.'
+     is used as a separator.  So we  simply strip everything up until
+     the last dot.  */
+  int prefix;
+  
+  switch (gdbarch_bfd_arch_info (target_gdbarch ())->arch)
+    {
+    case bfd_arch_i386:
+      prefix = '.';
+      break;
+    case bfd_arch_sparc:
+      prefix = '$';
+      break;
+    default:
+      internal_error (__FILE__, __LINE__, "Unexpected arch");
+      break;
+    }
+
+  if (name[0] == prefix)
+    {
+      const char *p = strrchr (name, '.');
+      if (p)
+        return p + 1;
+    }
+
+  return name;
+}
+
+static CORE_ADDR
 sol2_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
   struct bound_minimal_symbol msym;
@@ -37,17 +119,15 @@ sol2_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
   return 0;
 }
 
-/* This is how we want PTIDs from Solaris core files to be
-   printed.  */
+/* This is how we want PTIDs from Solaris core files to be printed.  */
 
-std::string
+static std::string
 sol2_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid)
 {
   struct inferior *inf;
   int pid;
 
-  /* Check whether we're printing an LWP (gdb thread) or a
-     process.  */
+  /* Check whether we're printing an LWP (gdb thread) or a process.  */
   pid = ptid.lwp ();
   if (pid != 0)
     {
@@ -56,8 +136,7 @@ sol2_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid)
     }
 
   /* GDB didn't use to put a NT_PSTATUS note in Solaris cores.  If
-     that's missing, then we're dealing with a fake PID corelow.c made
-     up.  */
+     that's missing, then we're dealing with a fake PID corelow.c made up.  */
   inf = find_inferior_ptid (current_inferior ()->process_target (), ptid);
   if (inf == NULL || inf->fake_pid_p)
     return "<core>";
@@ -65,3 +144,24 @@ sol2_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid)
   /* Not fake; print as usual.  */
   return normal_pid_to_str (ptid);
 }
+
+/* To be called from GDB_OSABI_SOLARIS handlers.  */
+
+void
+sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  /* 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
+     sol2_static_transform_name for more information.  */
+  set_gdbarch_static_transform_name (gdbarch, sol2_static_transform_name);
+
+  /* Solaris uses SVR4-style shared libraries.  */
+  set_gdbarch_skip_solib_resolver (gdbarch, sol2_skip_solib_resolver);
+
+  /* How to print LWP PTIDs from core files.  */
+  set_gdbarch_core_pid_to_str (gdbarch, sol2_core_pid_to_str);
+}
index b3f01a02f0848b9407d55fbcbdf45c7b31bc4a59..ecace995a3422fc3488f19a898de52cc13c6ae69 100644 (file)
@@ -22,8 +22,8 @@
 
 struct gdbarch;
 
-CORE_ADDR sol2_skip_solib_resolver (struct gdbarch *, CORE_ADDR);
+int sol2_sigtramp_p (struct frame_info *this_frame);
 
-std::string sol2_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid);
+void sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch);
 
 #endif /* sol2-tdep.h */
index 2df66d512cef6b9e18513b219a46bdb8f222c4e6..dfd6e3454e5477d63c428ccfadfd939c41284d9e 100644 (file)
@@ -99,30 +99,6 @@ static const struct regset sparc32_sol2_fpregset =
   };
 \f
 
-/* 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;
-}
 \f
 
 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 ();
index 37fe3ad196fcd7d7e92fc056db9157b3722c1684..59eaf29be4db26b40edf5007009c98acafad5b94 100644 (file)
@@ -245,10 +245,6 @@ extern int sparc_is_annulled_branch_insn (CORE_ADDR pc);
 extern const struct sparc_gregmap sparc32_sol2_gregmap;
 extern const struct sparc_fpregmap sparc32_sol2_fpregmap;
 
-extern int sparc_sol2_pc_in_sigtramp (CORE_ADDR pc, const char *name);
-
-extern const char *sparc_sol2_static_transform_name (const char *name);
-
 extern void sparc32_sol2_init_abi (struct gdbarch_info info,
                                   struct gdbarch *gdbarch);
 
index 550fed724fc3446ca79feafd82496b24a88b2b80..31ee8739e6f8569cb13a1e60cd81d69a56327786 100644 (file)
@@ -180,15 +180,9 @@ sparc64_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 sparc64_sol2_sigtramp_frame_unwind =
 {
   SIGTRAMP_FRAME,
@@ -216,19 +210,10 @@ sparc64_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 
   sparc64_init_abi (info, gdbarch);
 
-  /* 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_lp64_fetch_link_map_offsets);
 
@@ -238,9 +223,6 @@ sparc64_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 
   /* Solaris has kernel-assisted single-stepping support.  */
   set_gdbarch_software_single_step (gdbarch, NULL);
-
-  /* How to print LWP PTIDs from core files.  */
-  set_gdbarch_core_pid_to_str (gdbarch, sol2_core_pid_to_str);
 }
 
 void _initialize_sparc64_sol2_tdep ();
This page took 0.043563 seconds and 4 git commands to generate.