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.
This commit is contained in:
Fred Fish 1992-03-19 02:26:25 +00:00
parent 2cd9998540
commit dc52fc7118
2 changed files with 20 additions and 0 deletions

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

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