From: Fred Fish Date: Thu, 19 Mar 1992 02:26:25 +0000 (+0000) Subject: Add and use definition for IN_SOLIB_TRAMPOLINE which allows wait_for_inferior X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=dc52fc71183fc32594388a619c4fa55e83648ced;p=binutils-gdb.git 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 177d7a134ca..53472443d9c 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 4d95ea0502e..9e92d9217d6 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))