public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [RFC][PATCH] Move common handlers to sol2_init_abi
@ 2020-06-23 13:15 Rainer Orth
  2020-06-24 10:27 ` Rainer Orth
  2020-06-24 14:56 ` Simon Marchi
  0 siblings, 2 replies; 11+ messages in thread
From: Rainer Orth @ 2020-06-23 13:15 UTC (permalink / raw)
  To: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 4718 bytes --]

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  <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.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: sol2-common-init_abi.patch --]
[-- Type: text/x-patch, Size: 17576 bytes --]

# HG changeset patch
# Parent  7e33a7dc78bfbff535962f2f9db86818cc879796
Move common handlers to sol2_init_abi

diff --git a/gdb/amd64-sol2-tdep.c b/gdb/amd64-sol2-tdep.c
--- a/gdb/amd64-sol2-tdep.c
+++ b/gdb/amd64-sol2-tdep.c
@@ -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
   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 ();
diff --git a/gdb/i386-sol2-tdep.c b/gdb/i386-sol2-tdep.c
--- a/gdb/i386-sol2-tdep.c
+++ b/gdb/i386-sol2-tdep.c
@@ -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_in
   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 
   /* 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 
   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
 
diff --git a/gdb/sol2-tdep.c b/gdb/sol2-tdep.c
--- a/gdb/sol2-tdep.c
+++ b/gdb/sol2-tdep.c
@@ -25,7 +25,89 @@
 
 #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
   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 *gd
     }
 
   /* 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 *gd
   /* 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);
+}
diff --git a/gdb/sol2-tdep.h b/gdb/sol2-tdep.h
--- a/gdb/sol2-tdep.h
+++ b/gdb/sol2-tdep.h
@@ -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 */
diff --git a/gdb/sparc-sol2-tdep.c b/gdb/sparc-sol2-tdep.c
--- a/gdb/sparc-sol2-tdep.c
+++ b/gdb/sparc-sol2-tdep.c
@@ -99,30 +99,6 @@ static const struct regset sparc32_sol2_
   };
 \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 (con
 				     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
   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_in
   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_in
   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 ();
diff --git a/gdb/sparc-tdep.h b/gdb/sparc-tdep.h
--- a/gdb/sparc-tdep.h
+++ b/gdb/sparc-tdep.h
@@ -245,10 +245,6 @@ extern int sparc_is_annulled_branch_insn
 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);
 
diff --git a/gdb/sparc64-sol2-tdep.c b/gdb/sparc64-sol2-tdep.c
--- a/gdb/sparc64-sol2-tdep.c
+++ b/gdb/sparc64-sol2-tdep.c
@@ -180,15 +180,9 @@ sparc64_sol2_sigtramp_frame_sniffer (con
 				     struct frame_info *this_frame,
 				     void **this_cache)
 {
-  CORE_ADDR pc = get_frame_pc (this_frame);
-  const char *name;
+  return sol2_sigtramp_p (this_frame);
+}
 
-  find_pc_partial_function (pc, &name, NULL, NULL);
-  if (sparc_sol2_pc_in_sigtramp (pc, name))
-    return 1;
-
-  return 0;
-}
 static const struct frame_unwind sparc64_sol2_sigtramp_frame_unwind =
 {
   SIGTRAMP_FRAME,
@@ -216,19 +210,10 @@ sparc64_sol2_init_abi (struct gdbarch_in
 
   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_in
 
   /* 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 ();

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [RFC][PATCH] Move common handlers to sol2_init_abi
  2020-06-23 13:15 [RFC][PATCH] Move common handlers to sol2_init_abi Rainer Orth
@ 2020-06-24 10:27 ` Rainer Orth
  2020-06-24 14:56 ` Simon Marchi
  1 sibling, 0 replies; 11+ messages in thread
From: Rainer Orth @ 2020-06-24 10:27 UTC (permalink / raw)
  To: gdb-patches

Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> writes:

> 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.

I must have been half asleep when I wrote this: sparc*-*-linux* already
*does* link sol2-tdep.o.  I've now verified (on gcc202 in the GCC
compile farm) that gdb links without and with my patch, so I'm going to
install the patch soon.

I couldn't do a proper regtest, however, since even unmodified master
ran into a tight loop testing gdb.base/testenv.exp (it went up to 4.4+
million iterations before I noticed the problem).  I cannot report the
details now since the system has been unaccessible for two days.

The other questions raised in the patch submission still hold, though.

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [RFC][PATCH] Move common handlers to sol2_init_abi
  2020-06-23 13:15 [RFC][PATCH] Move common handlers to sol2_init_abi Rainer Orth
  2020-06-24 10:27 ` Rainer Orth
@ 2020-06-24 14:56 ` Simon Marchi
  2020-06-24 20:57   ` Rainer Orth
  1 sibling, 1 reply; 11+ messages in thread
From: Simon Marchi @ 2020-06-24 14:56 UTC (permalink / raw)
  To: Rainer Orth, gdb-patches

On 2020-06-23 9:15 a.m., Rainer Orth wrote:
> 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.

Hmm, sparc-*-linux* and sparc64-*-linux* have no business including some
Solaris-specific files in the build.

When building a GDB on sparc64/Linux, it shouldn't have support for debugging
sparc64/Solaris binaries.  If you want that, you need to pass
--enable-targets=sparc64-solaris-something (I don't know what the actual triplet
would be).

So it seems like there is some untangling here, putting the functions on the
files that they really belong to, until you can successfully build a sparc64/Linux
GDB without including the sol2 tdep files.  I haven't looked much at the patch
(don't have time right now), but tt would be easier to review if you could go
incrementally, one function at a time.

> 
> 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?

I would be completely fine with it.  The Solaris port pretty much depends on
the time you have to give, so if you don't have time to deal with ancient stuff,
it's fine to drop support for it.

> 
>   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.

I would also be fine with it.  For years, all we have done to the stabs code
(and other old debug info reader) is adjust it to interface changes of the
core code.  And actually, since that goes pretty much untested, it is likely
that an old GDB is less buggy than today's GDB w.r.t. stabs debug info reading.

Simon


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [RFC][PATCH] Move common handlers to sol2_init_abi
  2020-06-24 14:56 ` Simon Marchi
@ 2020-06-24 20:57   ` Rainer Orth
  2020-06-25  8:23     ` [PATCH] Don't include *sol2-tdep.o on Linux/sparc* Rainer Orth
  2020-06-25  8:26     ` [PATCH] Remove obsolete gdbarch_static_transform_name Rainer Orth
  0 siblings, 2 replies; 11+ messages in thread
From: Rainer Orth @ 2020-06-24 20:57 UTC (permalink / raw)
  To: Simon Marchi; +Cc: gdb-patches

Hi Simon,

> On 2020-06-23 9:15 a.m., Rainer Orth wrote:
>> 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.
>
> Hmm, sparc-*-linux* and sparc64-*-linux* have no business including some
> Solaris-specific files in the build.
>
> When building a GDB on sparc64/Linux, it shouldn't have support for debugging
> sparc64/Solaris binaries.  If you want that, you need to pass
> --enable-targets=sparc64-solaris-something (I don't know what the actual triplet
> would be).

sparc{v9,64}-sun-solaris2.11

> So it seems like there is some untangling here, putting the functions on the
> files that they really belong to, until you can successfully build a
> sparc64/Linux
> GDB without including the sol2 tdep files.  I haven't looked much at the patch

From a quick check, this should just work today: the functions declared
in sparc*-sol2-tdep.c are only called in Solaris-specific files already.
I'll give it a try separately.  sparc{32,64}_sol2_init_abi are currently
declared in common files (sparc*-tdep.h), but they can just be made
static and the declarations removed.

> (don't have time right now), but tt would be easier to review if you could go
> incrementally, one function at a time.

I'd thought about that.  However, given that many of the features moved
to common code are rather obscure, I formally don't need approval for
Solaris-specific changes, and a make -j24 check takes between 30 and 60
minutes each time (there are some tests that regularly time out, letting
the test time grow out of bounds), I decided to keep it in one patch.

I'm primarily looking for answers to the meta-questions below here.

>> 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?
>
> I would be completely fine with it.  The Solaris port pretty much depends on
> the time you have to give, so if you don't have time to deal with ancient stuff,
> it's fine to drop support for it.

I guess I'll go for it, time permitting: while it doesn't create a
burden, it's just dead code these days.

>> * 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.
>
> I would also be fine with it.  For years, all we have done to the stabs code
> (and other old debug info reader) is adjust it to interface changes of the
> core code.  And actually, since that goes pretty much untested, it is likely
> that an old GDB is less buggy than today's GDB w.r.t. stabs debug info reading.

Probably someone just has to take the lead, both in GDB and GCC.
Especially in the latter, it's going to take a considerable amount of
work.

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH] Don't include *sol2-tdep.o on Linux/sparc*
  2020-06-24 20:57   ` Rainer Orth
@ 2020-06-25  8:23     ` Rainer Orth
  2020-06-25  9:57       ` Pedro Alves
  2020-06-25  8:26     ` [PATCH] Remove obsolete gdbarch_static_transform_name Rainer Orth
  1 sibling, 1 reply; 11+ messages in thread
From: Rainer Orth @ 2020-06-25  8:23 UTC (permalink / raw)
  To: Simon Marchi; +Cc: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 2531 bytes --]

Hi Simon,

>>> 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.
>>
>> Hmm, sparc-*-linux* and sparc64-*-linux* have no business including some
>> Solaris-specific files in the build.
>>
>> When building a GDB on sparc64/Linux, it shouldn't have support for debugging
>> sparc64/Solaris binaries.  If you want that, you need to pass
>> --enable-targets=sparc64-solaris-something (I don't know what the actual
>> triplet
>> would be).
>
> sparc{v9,64}-sun-solaris2.11
>
>> So it seems like there is some untangling here, putting the functions on the
>> files that they really belong to, until you can successfully build a
>> sparc64/Linux
>> GDB without including the sol2 tdep files.  I haven't looked much at the patch
>
> From a quick check, this should just work today: the functions declared
> in sparc*-sol2-tdep.c are only called in Solaris-specific files already.
> I'll give it a try separately.  sparc{32,64}_sol2_init_abi are currently
> declared in common files (sparc*-tdep.h), but they can just be made
> static and the declarations removed.

the following patch does just that: tested on sparc64-unknown-linux-gnu
(build only due to PR tdep/26170) and sparcv9-sun-solaris2.11.

Ok for master?

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University


2020-06-24  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	* configure.tgt <sparc-*-linux*> (gdb_target_obs): Remove
	sparc-sol2-tdep.o, sol2-tdep.o, sparc64-sol2-tdep.o.
	<sparc64-*-linux*> (gdb_target_obs): Remove sparc64-sol2-tdep.o,
	sol2-tdep.o, sparc-sol2-tdep.o.
	* sparc-sol2-tdep.c (sparc32_sol2_init_abi): Make static.
	* sparc-tdep.h (sparc32_sol2_init_abi): Remove.
	* sparc64-sol2-tdep.c (sparc64_sol2_init_abi): Make static.
	* sparc64-tdep.h (sparc64_sol2_init_abi): Remove.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: sol2-no-sol2-tdep-linux.patch --]
[-- Type: text/x-patch, Size: 2736 bytes --]

# HG changeset patch
# Parent  3a3a48c067f99b6fc95d7b297570b179fd575e9c
Don't include *sol2-tdep.o on Linux/sparc*

diff --git a/gdb/configure.tgt b/gdb/configure.tgt
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -585,20 +585,20 @@ sh*)
 
 sparc-*-linux*)
 	# Target: GNU/Linux SPARC
-	gdb_target_obs="sparc-tdep.o sparc-sol2-tdep.o sol2-tdep.o \
+	gdb_target_obs="sparc-tdep.o \
 			sparc-linux-tdep.o solib-svr4.o symfile-mem.o \
 			linux-tdep.o \
 			ravenscar-thread.o sparc-ravenscar-thread.o"
 	if test "x$enable_64_bit_bfd" = "xyes"; then
 	    # Target: GNU/Linux UltraSPARC
-	    gdb_target_obs="sparc64-tdep.o sparc64-sol2-tdep.o \
+	    gdb_target_obs="sparc64-tdep.o \
 			    sparc64-linux-tdep.o ${gdb_target_obs}"
 	fi
 	;;
 sparc64-*-linux*)
 	# Target: GNU/Linux UltraSPARC
-	gdb_target_obs="sparc64-tdep.o sparc64-sol2-tdep.o sol2-tdep.o \
-			sparc64-linux-tdep.o sparc-tdep.o sparc-sol2-tdep.o \
+	gdb_target_obs="sparc64-tdep.o \
+			sparc64-linux-tdep.o sparc-tdep.o \
 			sparc-linux-tdep.o solib-svr4.o linux-tdep.o \
 			ravenscar-thread.o sparc-ravenscar-thread.o"
 	;;
diff --git a/gdb/sparc-sol2-tdep.c b/gdb/sparc-sol2-tdep.c
--- a/gdb/sparc-sol2-tdep.c
+++ b/gdb/sparc-sol2-tdep.c
@@ -192,7 +192,7 @@ static const struct frame_unwind sparc32
 
 \f
 
-void
+static void
 sparc32_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
diff --git a/gdb/sparc-tdep.h b/gdb/sparc-tdep.h
--- a/gdb/sparc-tdep.h
+++ b/gdb/sparc-tdep.h
@@ -245,9 +245,6 @@ extern int sparc_is_annulled_branch_insn
 extern const struct sparc_gregmap sparc32_sol2_gregmap;
 extern const struct sparc_fpregmap sparc32_sol2_fpregmap;
 
-extern void sparc32_sol2_init_abi (struct gdbarch_info info,
-				   struct gdbarch *gdbarch);
-
 /* Functions and variables exported from sparcnbsd-tdep.c.  */
 
 /* Register offsets for NetBSD.  */
diff --git a/gdb/sparc64-sol2-tdep.c b/gdb/sparc64-sol2-tdep.c
--- a/gdb/sparc64-sol2-tdep.c
+++ b/gdb/sparc64-sol2-tdep.c
@@ -195,7 +195,7 @@ static const struct frame_unwind sparc64
 
 \f
 
-void
+static void
 sparc64_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
diff --git a/gdb/sparc64-tdep.h b/gdb/sparc64-tdep.h
--- a/gdb/sparc64-tdep.h
+++ b/gdb/sparc64-tdep.h
@@ -119,9 +119,6 @@ extern void sparc64_collect_fpregset (co
 extern const struct sparc_gregmap sparc64_sol2_gregmap;
 extern const struct sparc_fpregmap sparc64_sol2_fpregmap;
 
-extern void sparc64_sol2_init_abi (struct gdbarch_info info,
-				   struct gdbarch *gdbarch);
-
 /* Variables exported from sparc64-fbsd-tdep.c.  */
 
 /* Register offsets for FreeBSD/sparc64.  */

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH] Remove obsolete gdbarch_static_transform_name
  2020-06-24 20:57   ` Rainer Orth
  2020-06-25  8:23     ` [PATCH] Don't include *sol2-tdep.o on Linux/sparc* Rainer Orth
@ 2020-06-25  8:26     ` Rainer Orth
  2020-06-25  9:18       ` Pedro Alves
  1 sibling, 1 reply; 11+ messages in thread
From: Rainer Orth @ 2020-06-25  8:26 UTC (permalink / raw)
  To: Simon Marchi; +Cc: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 1857 bytes --]

Hi Simon,

>>> 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?
>>
>> I would be completely fine with it.  The Solaris port pretty much depends on
>> the time you have to give, so if you don't have time to deal with ancient
>> stuff,
>> it's fine to drop support for it.
>
> I guess I'll go for it, time permitting: while it doesn't create a
> burden, it's just dead code these days.

here's the patch: tested on sparcv9-sun-solaris2.11 and
x86_64-pc-linux-gnu with --enable-targets=all (which promptly caught an
error in xcoffread.c).

Ok for master?

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University


2020-06-24  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	* sol2-tdep.c (sol2_static_transform_name): Remove.
	(sol2_init_abi): Don't register it.
	* gdbarch.sh (static_transform_name): Remove.
	* gdbarch.c, gdbarch.h: Regenerate.

	* dbxread.c (read_dbx_symtab) <'S'>: Remove call to
	gdbarch_static_transform_name.
	* mdebugread.c (parse_partial_symbols) <'S'>: Likewise.
	* stabsread.c (define_symbol): Remove SunPRO etc. static variable
	encoding.
	(define_symbol) <'S'>: Remove gdbarch_static_transform_name
	handling.
	<'V'>: Likewise.
	* xcoffread.c (scan_xcoff_symtab): Remove gdbarch.
	<'S'>: Remove call to gdbarch_static_transform_name.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: sol2-rm-static_transform_name.patch --]
[-- Type: text/x-patch, Size: 10432 bytes --]

# HG changeset patch
# Parent  cc44512d0e8fabbf4adab517c02f762a26156bd5
Remove obsolete gdbarch_static_transform_name

diff --git a/gdb/dbxread.c b/gdb/dbxread.c
--- a/gdb/dbxread.c
+++ b/gdb/dbxread.c
@@ -1460,9 +1460,6 @@ read_dbx_symtab (minimal_symbol_reader &
 	  switch (p[1])
 	    {
 	    case 'S':
-	      if (gdbarch_static_transform_name_p (gdbarch))
-		gdbarch_static_transform_name (gdbarch, namestring);
-
 	      add_psymbol_to_list (gdb::string_view (sym_name, sym_len), true,
 				   VAR_DOMAIN, LOC_STATIC,
 				   data_sect_index,
diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c
--- a/gdb/gdbarch.c
+++ b/gdb/gdbarch.c
@@ -292,7 +292,6 @@ struct gdbarch
   gdbarch_relocate_instruction_ftype *relocate_instruction;
   gdbarch_overlay_update_ftype *overlay_update;
   gdbarch_core_read_description_ftype *core_read_description;
-  gdbarch_static_transform_name_ftype *static_transform_name;
   int sofun_address_maybe_missing;
   gdbarch_process_record_ftype *process_record;
   gdbarch_process_record_signal_ftype *process_record_signal;
@@ -658,7 +657,6 @@ verify_gdbarch (struct gdbarch *gdbarch)
   /* Skip verify of relocate_instruction, has predicate.  */
   /* Skip verify of overlay_update, has predicate.  */
   /* Skip verify of core_read_description, has predicate.  */
-  /* Skip verify of static_transform_name, has predicate.  */
   /* Skip verify of sofun_address_maybe_missing, invalid_p == 0 */
   /* Skip verify of process_record, has predicate.  */
   /* Skip verify of process_record_signal, has predicate.  */
@@ -1437,12 +1435,6 @@ gdbarch_dump (struct gdbarch *gdbarch, s
                       "gdbarch_dump: stap_register_suffixes = %s\n",
                       pstring_list (gdbarch->stap_register_suffixes));
   fprintf_unfiltered (file,
-                      "gdbarch_dump: gdbarch_static_transform_name_p() = %d\n",
-                      gdbarch_static_transform_name_p (gdbarch));
-  fprintf_unfiltered (file,
-                      "gdbarch_dump: static_transform_name = <%s>\n",
-                      host_address_to_string (gdbarch->static_transform_name));
-  fprintf_unfiltered (file,
                       "gdbarch_dump: sw_breakpoint_from_kind = <%s>\n",
                       host_address_to_string (gdbarch->sw_breakpoint_from_kind));
   fprintf_unfiltered (file,
@@ -4076,30 +4068,6 @@ set_gdbarch_core_read_description (struc
 }
 
 int
-gdbarch_static_transform_name_p (struct gdbarch *gdbarch)
-{
-  gdb_assert (gdbarch != NULL);
-  return gdbarch->static_transform_name != NULL;
-}
-
-const char *
-gdbarch_static_transform_name (struct gdbarch *gdbarch, const char *name)
-{
-  gdb_assert (gdbarch != NULL);
-  gdb_assert (gdbarch->static_transform_name != NULL);
-  if (gdbarch_debug >= 2)
-    fprintf_unfiltered (gdb_stdlog, "gdbarch_static_transform_name called\n");
-  return gdbarch->static_transform_name (name);
-}
-
-void
-set_gdbarch_static_transform_name (struct gdbarch *gdbarch,
-                                   gdbarch_static_transform_name_ftype static_transform_name)
-{
-  gdbarch->static_transform_name = static_transform_name;
-}
-
-int
 gdbarch_sofun_address_maybe_missing (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h
--- a/gdb/gdbarch.h
+++ b/gdb/gdbarch.h
@@ -1112,14 +1112,6 @@ typedef const struct target_desc * (gdba
 extern const struct target_desc * gdbarch_core_read_description (struct gdbarch *gdbarch, struct target_ops *target, bfd *abfd);
 extern void set_gdbarch_core_read_description (struct gdbarch *gdbarch, gdbarch_core_read_description_ftype *core_read_description);
 
-/* Handle special encoding of static variables in stabs debug info. */
-
-extern int gdbarch_static_transform_name_p (struct gdbarch *gdbarch);
-
-typedef const char * (gdbarch_static_transform_name_ftype) (const char *name);
-extern const char * gdbarch_static_transform_name (struct gdbarch *gdbarch, const char *name);
-extern void set_gdbarch_static_transform_name (struct gdbarch *gdbarch, gdbarch_static_transform_name_ftype *static_transform_name);
-
 /* Set if the address in N_SO or N_FUN stabs may be zero. */
 
 extern int gdbarch_sofun_address_maybe_missing (struct gdbarch *gdbarch);
diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh
--- a/gdb/gdbarch.sh
+++ b/gdb/gdbarch.sh
@@ -842,8 +842,6 @@ F;void;overlay_update;struct obj_section
 
 M;const struct target_desc *;core_read_description;struct target_ops *target, bfd *abfd;target, abfd
 
-# Handle special encoding of static variables in stabs debug info.
-F;const char *;static_transform_name;const char *name;name
 # Set if the address in N_SO or N_FUN stabs may be zero.
 v;int;sofun_address_maybe_missing;;;0;0;;0
 
diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
--- a/gdb/mdebugread.c
+++ b/gdb/mdebugread.c
@@ -3029,10 +3029,6 @@ parse_partial_symbols (minimal_symbol_re
 		    switch (p[1])
 		      {
 		      case 'S':
-			if (gdbarch_static_transform_name_p (gdbarch))
-			  namestring = gdbarch_static_transform_name
-					 (gdbarch, namestring);
-
 			add_psymbol_to_list (gdb::string_view (namestring,
 							       p - namestring),
 					     true, VAR_DOMAIN, LOC_STATIC,
diff --git a/gdb/sol2-tdep.c b/gdb/sol2-tdep.c
--- a/gdb/sol2-tdep.c
+++ b/gdb/sol2-tdep.c
@@ -61,52 +61,6 @@ sol2_sigtramp_p (struct frame_info *this
   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)
 {
@@ -155,10 +109,6 @@ sol2_init_abi (struct gdbarch_info info,
      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);
 
diff --git a/gdb/stabsread.c b/gdb/stabsread.c
--- a/gdb/stabsread.c
+++ b/gdb/stabsread.c
@@ -724,9 +724,6 @@ define_symbol (CORE_ADDR valu, const cha
 	  goto normal;
 
 	case 'X':
-	  /* SunPRO (3.0 at least) static variable encoding.  */
-	  if (gdbarch_static_transform_name_p (gdbarch))
-	    goto normal;
 	  /* fall through */
 
 	default:
@@ -1186,23 +1183,6 @@ define_symbol (CORE_ADDR valu, const cha
       SYMBOL_TYPE (sym) = read_type (&p, objfile);
       SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
       SET_SYMBOL_VALUE_ADDRESS (sym, valu);
-      if (gdbarch_static_transform_name_p (gdbarch)
-	  && gdbarch_static_transform_name (gdbarch, sym->linkage_name ())
-	     != sym->linkage_name ())
-	{
-	  struct bound_minimal_symbol msym;
-
-	  msym = lookup_minimal_symbol (sym->linkage_name (), NULL, objfile);
-	  if (msym.minsym != NULL)
-	    {
-	      const char *new_name = gdbarch_static_transform_name
-		(gdbarch, sym->linkage_name ());
-
-	      sym->set_linkage_name (new_name);
-	      SET_SYMBOL_VALUE_ADDRESS (sym,
-					BMSYMBOL_VALUE_ADDRESS (msym));
-	    }
-	}
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
       add_symbol_to_list (sym, get_file_symbols ());
       break;
@@ -1367,24 +1347,8 @@ define_symbol (CORE_ADDR valu, const cha
       SYMBOL_TYPE (sym) = read_type (&p, objfile);
       SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
       SET_SYMBOL_VALUE_ADDRESS (sym, valu);
-      if (gdbarch_static_transform_name_p (gdbarch)
-	  && gdbarch_static_transform_name (gdbarch, sym->linkage_name ())
-	     != sym->linkage_name ())
-	{
-	  struct bound_minimal_symbol msym;
-
-	  msym = lookup_minimal_symbol (sym->linkage_name (), NULL, objfile);
-	  if (msym.minsym != NULL)
-	    {
-	      const char *new_name = gdbarch_static_transform_name
-		(gdbarch, sym->linkage_name ());
-
-	      sym->set_linkage_name (new_name);
-	      SET_SYMBOL_VALUE_ADDRESS (sym, BMSYMBOL_VALUE_ADDRESS (msym));
-	    }
-	}
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-	add_symbol_to_list (sym, get_local_symbols ());
+      add_symbol_to_list (sym, get_local_symbols ());
       break;
 
     case 'v':
diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c
--- a/gdb/xcoffread.c
+++ b/gdb/xcoffread.c
@@ -2114,7 +2114,6 @@ static void
 scan_xcoff_symtab (minimal_symbol_reader &reader,
 		   struct objfile *objfile)
 {
-  struct gdbarch *gdbarch = objfile->arch ();
   CORE_ADDR toc_offset = 0;	/* toc offset value in data section.  */
   const char *filestring = NULL;
 
@@ -2577,10 +2576,6 @@ scan_xcoff_symtab (minimal_symbol_reader
 	    switch (p[1])
 	      {
 	      case 'S':
-		if (gdbarch_static_transform_name_p (gdbarch))
-		  namestring = gdbarch_static_transform_name
-				 (gdbarch, namestring);
-
 		add_psymbol_to_list (gdb::string_view (namestring,
 						       p - namestring),
 				     true, VAR_DOMAIN, LOC_STATIC,

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] Remove obsolete gdbarch_static_transform_name
  2020-06-25  8:26     ` [PATCH] Remove obsolete gdbarch_static_transform_name Rainer Orth
@ 2020-06-25  9:18       ` Pedro Alves
  2020-06-25 12:07         ` Rainer Orth
  0 siblings, 1 reply; 11+ messages in thread
From: Pedro Alves @ 2020-06-25  9:18 UTC (permalink / raw)
  To: Rainer Orth, Simon Marchi; +Cc: gdb-patches

On 6/25/20 9:26 AM, Rainer Orth wrote:
>  	case 'X':
> -	  /* SunPRO (3.0 at least) static variable encoding.  */
> -	  if (gdbarch_static_transform_name_p (gdbarch))
> -	    goto normal;
>  	  /* fall through */
>  

If you're leaving the 

  case 'X':

then I think you should leave a comment in place about that
is about.

But I'd just remove that case X line, since the fallthrough
is to the default case anyway.

Thanks,
Pedro Alves


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] Don't include *sol2-tdep.o on Linux/sparc*
  2020-06-25  8:23     ` [PATCH] Don't include *sol2-tdep.o on Linux/sparc* Rainer Orth
@ 2020-06-25  9:57       ` Pedro Alves
  2020-06-25 12:03         ` Rainer Orth
  0 siblings, 1 reply; 11+ messages in thread
From: Pedro Alves @ 2020-06-25  9:57 UTC (permalink / raw)
  To: Rainer Orth, Simon Marchi; +Cc: gdb-patches

On 6/25/20 9:23 AM, Rainer Orth wrote:
>> From a quick check, this should just work today: the functions declared
>> in sparc*-sol2-tdep.c are only called in Solaris-specific files already.
>> I'll give it a try separately.  sparc{32,64}_sol2_init_abi are currently
>> declared in common files (sparc*-tdep.h), but they can just be made
>> static and the declarations removed.
> the following patch does just that: tested on sparc64-unknown-linux-gnu
> (build only due to PR tdep/26170) and sparcv9-sun-solaris2.11.

I got curious and looked into git history to find why that was done
in the first place.

'git blame configure.tgt' points at a4ce5b0d0204 as the commit that
converted the old .mt files into configure.tgt.

And then:

 $ git blame a4ce5b0d0204^ -- ./config/sparc/linux64.mt

points at:

 commit 691342f948aa4f8c4f4e039669276faf753a36b4
 Author:     David S. Miller <davem@redhat.com>
 AuthorDate: Mon Feb 27 06:14:51 2006 +0000

    2006-02-26  David S. Miller  <davem@sunset.davemloft.net>
    
            * config/sparc/linux.mt (TDEPFILES): Add sol2-tdep.o.
            * config/sparc/linux64.mt (TDEPFILES): Likewise.

Which is... drumroll... a big nothingburger:

 https://sourceware.org/legacy-ml/gdb-patches/2006-02/msg00492.html

So, nothing to see here, move along.  :-)

Thanks,
Pedro Alves


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] Don't include *sol2-tdep.o on Linux/sparc*
  2020-06-25  9:57       ` Pedro Alves
@ 2020-06-25 12:03         ` Rainer Orth
  0 siblings, 0 replies; 11+ messages in thread
From: Rainer Orth @ 2020-06-25 12:03 UTC (permalink / raw)
  To: Pedro Alves; +Cc: Simon Marchi, gdb-patches

Hi Pedro,

> On 6/25/20 9:23 AM, Rainer Orth wrote:
>>> From a quick check, this should just work today: the functions declared
>>> in sparc*-sol2-tdep.c are only called in Solaris-specific files already.
>>> I'll give it a try separately.  sparc{32,64}_sol2_init_abi are currently
>>> declared in common files (sparc*-tdep.h), but they can just be made
>>> static and the declarations removed.
>> the following patch does just that: tested on sparc64-unknown-linux-gnu
>> (build only due to PR tdep/26170) and sparcv9-sun-solaris2.11.
>
> I got curious and looked into git history to find why that was done
> in the first place.
>
> 'git blame configure.tgt' points at a4ce5b0d0204 as the commit that
> converted the old .mt files into configure.tgt.
>
> And then:
>
>  $ git blame a4ce5b0d0204^ -- ./config/sparc/linux64.mt
>
> points at:
>
>  commit 691342f948aa4f8c4f4e039669276faf753a36b4
>  Author:     David S. Miller <davem@redhat.com>
>  AuthorDate: Mon Feb 27 06:14:51 2006 +0000
>
>     2006-02-26  David S. Miller  <davem@sunset.davemloft.net>
>     
>             * config/sparc/linux.mt (TDEPFILES): Add sol2-tdep.o.
>             * config/sparc/linux64.mt (TDEPFILES): Likewise.
>
> Which is... drumroll... a big nothingburger:
>
>  https://sourceware.org/legacy-ml/gdb-patches/2006-02/msg00492.html
>
> So, nothing to see here, move along.  :-)

however, this only accounts for the presence of sol2-tdep.o, not the
rest (sparc*-sol2-tdep.o).  I looked further and they were present from
the beginning when sparc/linux64.mt was introduced.  There may have been
a reason to include them once but it's certainly gone today.

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] Remove obsolete gdbarch_static_transform_name
  2020-06-25  9:18       ` Pedro Alves
@ 2020-06-25 12:07         ` Rainer Orth
  2020-06-25 15:20           ` Pedro Alves
  0 siblings, 1 reply; 11+ messages in thread
From: Rainer Orth @ 2020-06-25 12:07 UTC (permalink / raw)
  To: Pedro Alves; +Cc: Simon Marchi, gdb-patches

[-- Attachment #1: Type: text/plain, Size: 1618 bytes --]

Hi Pedro,

> On 6/25/20 9:26 AM, Rainer Orth wrote:
>>  	case 'X':
>> -	  /* SunPRO (3.0 at least) static variable encoding.  */
>> -	  if (gdbarch_static_transform_name_p (gdbarch))
>> -	    goto normal;
>>  	  /* fall through */
>>  
>
> If you're leaving the 
>
>   case 'X':
>
> then I think you should leave a comment in place about that
> is about.

I thought about that, but I strongly suspect that the comment only
applies to the gdbarch_static_transform_name_p call that is gone now,
not the case as a whole.  I meant to check "Stabs Interface" included
with the Studio compilers (READMEs/stabs.pdf, a quite extensive 170-page
document), but forgot.

> But I'd just remove that case X line, since the fallthrough
> is to the default case anyway.

Right, that's certainly clearer.

Here's the revised version.  Ok now?

Thanks.
        Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University


2020-06-24  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	gdb:
	* sol2-tdep.c (sol2_static_transform_name): Remove.
	(sol2_init_abi): Don't register it.
	* gdbarch.sh (static_transform_name): Remove.
	* gdbarch.c, gdbarch.h: Regenerate.

	* dbxread.c (read_dbx_symtab) <'S'>: Remove call to
	gdbarch_static_transform_name.
	* mdebugread.c (parse_partial_symbols) <'S'>: Likewise.
	* stabsread.c (define_symbol) <'X'>: Remove.
	(define_symbol) <'S'>: Remove gdbarch_static_transform_name
	handling.
	<'V'>: Likewise.
	* xcoffread.c (scan_xcoff_symtab): Remove gdbarch.
	<'S'>: Remove call to gdbarch_static_transform_name.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: sol2-rm-static_transform_name.patch --]
[-- Type: text/x-patch, Size: 10563 bytes --]

# HG changeset patch
# Parent  cc44512d0e8fabbf4adab517c02f762a26156bd5
Remove obsolete gdbarch_static_transform_name

diff --git a/gdb/dbxread.c b/gdb/dbxread.c
--- a/gdb/dbxread.c
+++ b/gdb/dbxread.c
@@ -1460,9 +1460,6 @@ read_dbx_symtab (minimal_symbol_reader &
 	  switch (p[1])
 	    {
 	    case 'S':
-	      if (gdbarch_static_transform_name_p (gdbarch))
-		gdbarch_static_transform_name (gdbarch, namestring);
-
 	      add_psymbol_to_list (gdb::string_view (sym_name, sym_len), true,
 				   VAR_DOMAIN, LOC_STATIC,
 				   data_sect_index,
diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c
--- a/gdb/gdbarch.c
+++ b/gdb/gdbarch.c
@@ -292,7 +292,6 @@ struct gdbarch
   gdbarch_relocate_instruction_ftype *relocate_instruction;
   gdbarch_overlay_update_ftype *overlay_update;
   gdbarch_core_read_description_ftype *core_read_description;
-  gdbarch_static_transform_name_ftype *static_transform_name;
   int sofun_address_maybe_missing;
   gdbarch_process_record_ftype *process_record;
   gdbarch_process_record_signal_ftype *process_record_signal;
@@ -658,7 +657,6 @@ verify_gdbarch (struct gdbarch *gdbarch)
   /* Skip verify of relocate_instruction, has predicate.  */
   /* Skip verify of overlay_update, has predicate.  */
   /* Skip verify of core_read_description, has predicate.  */
-  /* Skip verify of static_transform_name, has predicate.  */
   /* Skip verify of sofun_address_maybe_missing, invalid_p == 0 */
   /* Skip verify of process_record, has predicate.  */
   /* Skip verify of process_record_signal, has predicate.  */
@@ -1437,12 +1435,6 @@ gdbarch_dump (struct gdbarch *gdbarch, s
                       "gdbarch_dump: stap_register_suffixes = %s\n",
                       pstring_list (gdbarch->stap_register_suffixes));
   fprintf_unfiltered (file,
-                      "gdbarch_dump: gdbarch_static_transform_name_p() = %d\n",
-                      gdbarch_static_transform_name_p (gdbarch));
-  fprintf_unfiltered (file,
-                      "gdbarch_dump: static_transform_name = <%s>\n",
-                      host_address_to_string (gdbarch->static_transform_name));
-  fprintf_unfiltered (file,
                       "gdbarch_dump: sw_breakpoint_from_kind = <%s>\n",
                       host_address_to_string (gdbarch->sw_breakpoint_from_kind));
   fprintf_unfiltered (file,
@@ -4076,30 +4068,6 @@ set_gdbarch_core_read_description (struc
 }
 
 int
-gdbarch_static_transform_name_p (struct gdbarch *gdbarch)
-{
-  gdb_assert (gdbarch != NULL);
-  return gdbarch->static_transform_name != NULL;
-}
-
-const char *
-gdbarch_static_transform_name (struct gdbarch *gdbarch, const char *name)
-{
-  gdb_assert (gdbarch != NULL);
-  gdb_assert (gdbarch->static_transform_name != NULL);
-  if (gdbarch_debug >= 2)
-    fprintf_unfiltered (gdb_stdlog, "gdbarch_static_transform_name called\n");
-  return gdbarch->static_transform_name (name);
-}
-
-void
-set_gdbarch_static_transform_name (struct gdbarch *gdbarch,
-                                   gdbarch_static_transform_name_ftype static_transform_name)
-{
-  gdbarch->static_transform_name = static_transform_name;
-}
-
-int
 gdbarch_sofun_address_maybe_missing (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h
--- a/gdb/gdbarch.h
+++ b/gdb/gdbarch.h
@@ -1112,14 +1112,6 @@ typedef const struct target_desc * (gdba
 extern const struct target_desc * gdbarch_core_read_description (struct gdbarch *gdbarch, struct target_ops *target, bfd *abfd);
 extern void set_gdbarch_core_read_description (struct gdbarch *gdbarch, gdbarch_core_read_description_ftype *core_read_description);
 
-/* Handle special encoding of static variables in stabs debug info. */
-
-extern int gdbarch_static_transform_name_p (struct gdbarch *gdbarch);
-
-typedef const char * (gdbarch_static_transform_name_ftype) (const char *name);
-extern const char * gdbarch_static_transform_name (struct gdbarch *gdbarch, const char *name);
-extern void set_gdbarch_static_transform_name (struct gdbarch *gdbarch, gdbarch_static_transform_name_ftype *static_transform_name);
-
 /* Set if the address in N_SO or N_FUN stabs may be zero. */
 
 extern int gdbarch_sofun_address_maybe_missing (struct gdbarch *gdbarch);
diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh
--- a/gdb/gdbarch.sh
+++ b/gdb/gdbarch.sh
@@ -842,8 +842,6 @@ F;void;overlay_update;struct obj_section
 
 M;const struct target_desc *;core_read_description;struct target_ops *target, bfd *abfd;target, abfd
 
-# Handle special encoding of static variables in stabs debug info.
-F;const char *;static_transform_name;const char *name;name
 # Set if the address in N_SO or N_FUN stabs may be zero.
 v;int;sofun_address_maybe_missing;;;0;0;;0
 
diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
--- a/gdb/mdebugread.c
+++ b/gdb/mdebugread.c
@@ -3029,10 +3029,6 @@ parse_partial_symbols (minimal_symbol_re
 		    switch (p[1])
 		      {
 		      case 'S':
-			if (gdbarch_static_transform_name_p (gdbarch))
-			  namestring = gdbarch_static_transform_name
-					 (gdbarch, namestring);
-
 			add_psymbol_to_list (gdb::string_view (namestring,
 							       p - namestring),
 					     true, VAR_DOMAIN, LOC_STATIC,
diff --git a/gdb/sol2-tdep.c b/gdb/sol2-tdep.c
--- a/gdb/sol2-tdep.c
+++ b/gdb/sol2-tdep.c
@@ -61,52 +61,6 @@ sol2_sigtramp_p (struct frame_info *this
   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)
 {
@@ -155,10 +109,6 @@ sol2_init_abi (struct gdbarch_info info,
      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);
 
diff --git a/gdb/stabsread.c b/gdb/stabsread.c
--- a/gdb/stabsread.c
+++ b/gdb/stabsread.c
@@ -723,12 +723,6 @@ define_symbol (CORE_ADDR valu, const cha
 	  /* This was an anonymous type that was never fixed up.  */
 	  goto normal;
 
-	case 'X':
-	  /* SunPRO (3.0 at least) static variable encoding.  */
-	  if (gdbarch_static_transform_name_p (gdbarch))
-	    goto normal;
-	  /* fall through */
-
 	default:
 	  complaint (_("Unknown C++ symbol name `%s'"),
 		     string);
@@ -1186,23 +1180,6 @@ define_symbol (CORE_ADDR valu, const cha
       SYMBOL_TYPE (sym) = read_type (&p, objfile);
       SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
       SET_SYMBOL_VALUE_ADDRESS (sym, valu);
-      if (gdbarch_static_transform_name_p (gdbarch)
-	  && gdbarch_static_transform_name (gdbarch, sym->linkage_name ())
-	     != sym->linkage_name ())
-	{
-	  struct bound_minimal_symbol msym;
-
-	  msym = lookup_minimal_symbol (sym->linkage_name (), NULL, objfile);
-	  if (msym.minsym != NULL)
-	    {
-	      const char *new_name = gdbarch_static_transform_name
-		(gdbarch, sym->linkage_name ());
-
-	      sym->set_linkage_name (new_name);
-	      SET_SYMBOL_VALUE_ADDRESS (sym,
-					BMSYMBOL_VALUE_ADDRESS (msym));
-	    }
-	}
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
       add_symbol_to_list (sym, get_file_symbols ());
       break;
@@ -1367,24 +1344,8 @@ define_symbol (CORE_ADDR valu, const cha
       SYMBOL_TYPE (sym) = read_type (&p, objfile);
       SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
       SET_SYMBOL_VALUE_ADDRESS (sym, valu);
-      if (gdbarch_static_transform_name_p (gdbarch)
-	  && gdbarch_static_transform_name (gdbarch, sym->linkage_name ())
-	     != sym->linkage_name ())
-	{
-	  struct bound_minimal_symbol msym;
-
-	  msym = lookup_minimal_symbol (sym->linkage_name (), NULL, objfile);
-	  if (msym.minsym != NULL)
-	    {
-	      const char *new_name = gdbarch_static_transform_name
-		(gdbarch, sym->linkage_name ());
-
-	      sym->set_linkage_name (new_name);
-	      SET_SYMBOL_VALUE_ADDRESS (sym, BMSYMBOL_VALUE_ADDRESS (msym));
-	    }
-	}
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-	add_symbol_to_list (sym, get_local_symbols ());
+      add_symbol_to_list (sym, get_local_symbols ());
       break;
 
     case 'v':
diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c
--- a/gdb/xcoffread.c
+++ b/gdb/xcoffread.c
@@ -2114,7 +2114,6 @@ static void
 scan_xcoff_symtab (minimal_symbol_reader &reader,
 		   struct objfile *objfile)
 {
-  struct gdbarch *gdbarch = objfile->arch ();
   CORE_ADDR toc_offset = 0;	/* toc offset value in data section.  */
   const char *filestring = NULL;
 
@@ -2577,10 +2576,6 @@ scan_xcoff_symtab (minimal_symbol_reader
 	    switch (p[1])
 	      {
 	      case 'S':
-		if (gdbarch_static_transform_name_p (gdbarch))
-		  namestring = gdbarch_static_transform_name
-				 (gdbarch, namestring);
-
 		add_psymbol_to_list (gdb::string_view (namestring,
 						       p - namestring),
 				     true, VAR_DOMAIN, LOC_STATIC,

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] Remove obsolete gdbarch_static_transform_name
  2020-06-25 12:07         ` Rainer Orth
@ 2020-06-25 15:20           ` Pedro Alves
  0 siblings, 0 replies; 11+ messages in thread
From: Pedro Alves @ 2020-06-25 15:20 UTC (permalink / raw)
  To: Rainer Orth; +Cc: Simon Marchi, gdb-patches

On 6/25/20 1:07 PM, Rainer Orth wrote:

>> But I'd just remove that case X line, since the fallthrough
>> is to the default case anyway.
> 
> Right, that's certainly clearer.
> 
> Here's the revised version.  Ok now?

Sure, it's fine with me.

Thanks,
Pedro Alves


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2020-06-25 15:20 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-23 13:15 [RFC][PATCH] Move common handlers to sol2_init_abi Rainer Orth
2020-06-24 10:27 ` Rainer Orth
2020-06-24 14:56 ` Simon Marchi
2020-06-24 20:57   ` Rainer Orth
2020-06-25  8:23     ` [PATCH] Don't include *sol2-tdep.o on Linux/sparc* Rainer Orth
2020-06-25  9:57       ` Pedro Alves
2020-06-25 12:03         ` Rainer Orth
2020-06-25  8:26     ` [PATCH] Remove obsolete gdbarch_static_transform_name Rainer Orth
2020-06-25  9:18       ` Pedro Alves
2020-06-25 12:07         ` Rainer Orth
2020-06-25 15:20           ` Pedro Alves

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).