aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFred Fish <fnf@specifix.com>1992-03-19 02:26:25 +0000
committerFred Fish <fnf@specifix.com>1992-03-19 02:26:25 +0000
commitdc52fc71183fc32594388a619c4fa55e83648ced (patch)
treec5ac41b6a6f12a4ee0232f4f05e66f38719bb588
parent2cd999854048fb4e3cd5c8762f40427221eb4112 (diff)
downloadgdb-dc52fc71183fc32594388a619c4fa55e83648ced.zip
gdb-dc52fc71183fc32594388a619c4fa55e83648ced.tar.gz
gdb-dc52fc71183fc32594388a619c4fa55e83648ced.tar.bz2
Add and use definition for IN_SOLIB_TRAMPOLINE which allows wait_for_inferior
to test whether or not it has stepped into the glue that binds an application to a shared library routine.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/tm-sysv4.h14
2 files changed, 20 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 177d7a1..5347244 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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.
diff --git a/gdb/tm-sysv4.h b/gdb/tm-sysv4.h
index 4d95ea0..9e92d92 100644
--- a/gdb/tm-sysv4.h
+++ b/gdb/tm-sysv4.h
@@ -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))