Add and use definition for IN_SOLIB_TRAMPOLINE which allows wait_for_inferior
authorFred Fish <fnf@specifix.com>
Thu, 19 Mar 1992 02:26:25 +0000 (02:26 +0000)
committerFred Fish <fnf@specifix.com>
Thu, 19 Mar 1992 02:26:25 +0000 (02:26 +0000)
to test whether or not it has stepped into the glue that binds an
application to a shared library routine.

gdb/ChangeLog
gdb/tm-sysv4.h

index 177d7a134cad57165d502da5820033071ae1b978..53472443d9c28979002ef58de14dcaeb85a4d16a 100644 (file)
@@ -1,3 +1,9 @@
+Wed Mar 18 18:22:46 1992  Fred Fish  (fnf@cygnus.com)
+
+       * infrun.c (IN_SOLIB_TRAMPOLINE):  Add default definition.
+       * infrun.c (wait_for_inferior):  Use IN_SOLIB_TRAMPOLINE.
+       * tm-sysv4.h (IN_SOLIB_TRAMPOLINE): Add SVR4 definition.
+
 Wed Mar 18 15:51:15 1992  Per Bothner  (bothner@cygnus.com)
 
        Some improvements to g++ debugging.
index 4d95ea0502e78446847446b7ebcf520ba0ba99fa..9e92d9217d617c014605f7b1d950e3765904018b 100644 (file)
@@ -19,3 +19,17 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #include "solib.h"     /* Support for shared libraries. */
+
+/* For SVR4 shared libraries, each call to a library routine goes through
+   a small piece of trampoline code in the ".init" section.  Although each
+   of these fragments is labeled with the name of the routine being called,
+   the gdb symbol reading code deliberately ignores them so it won't confuse
+   them with the real functions.  It does however know about the label that
+   precedes all of the fragments, which is "_init".  Thus when we lookup a
+   function that corresponds to a PC value which is in one of the trampoline
+   fragments, we'll appear to be in the function "_init".  The following
+   macro will evaluate to nonzero when NAME is valid and matches "_init".
+   The horribly ugly wait_for_inferior() routine uses this macro to detect
+   when we have stepped into one of these fragments. */
+
+#define IN_SOLIB_TRAMPOLINE(pc,name) ((name) && (strcmp ("_init", name) == 0))