* somsolib.c (som_solib_get_got_by_pc): New function.
* somsolib.h (som_solib_get_got_by_pc): Add extern decl. * hppa-tdep.c (hppa_fix_call_dummy): Handle case where FUN is the function's export stub or real address in a shared library.
This commit is contained in:
parent
002199bca4
commit
b1bbe38b3d
4 changed files with 46 additions and 2 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
Wed Nov 30 22:27:27 1994 Jeff Law (law@snake.cs.utah.edu)
|
||||||
|
|
||||||
|
* somsolib.c (som_solib_get_got_by_pc): New function.
|
||||||
|
* somsolib.h (som_solib_get_got_by_pc): Add extern decl.
|
||||||
|
* hppa-tdep.c (hppa_fix_call_dummy): Handle case where FUN is the
|
||||||
|
function's export stub or real address in a shared library.
|
||||||
|
|
||||||
Tue Nov 29 13:40:25 1994 J.T. Conklin (jtc@rtl.cygnus.com)
|
Tue Nov 29 13:40:25 1994 J.T. Conklin (jtc@rtl.cygnus.com)
|
||||||
|
|
||||||
* config/i386/nbsd.mh (REGEX, REGEX1): No longer define.
|
* config/i386/nbsd.mh (REGEX, REGEX1): No longer define.
|
||||||
|
|
|
@ -1378,6 +1378,19 @@ hppa_fix_call_dummy (dummy, pc, fun, nargs, args, type, gcc_p)
|
||||||
at *fun. */
|
at *fun. */
|
||||||
fun = (CORE_ADDR) read_memory_integer (fun & ~0x3, 4);
|
fun = (CORE_ADDR) read_memory_integer (fun & ~0x3, 4);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
/* FUN could be either an export stub, or the real address of a
|
||||||
|
function in a shared library.
|
||||||
|
|
||||||
|
To call this function we need to get the GOT/DP value for the target
|
||||||
|
function. Do this by calling shared library support routines in
|
||||||
|
somsolib.c. Once the GOT value is in %r19 we can call the procedure
|
||||||
|
in the normal fashion. */
|
||||||
|
|
||||||
|
write_register (19, som_solib_get_got_by_pc (fun));
|
||||||
|
}
|
||||||
|
|
||||||
/* If we are calling an import stub (eg calling into a dynamic library)
|
/* If we are calling an import stub (eg calling into a dynamic library)
|
||||||
then have sr4export call the magic __d_plt_call routine which is linked
|
then have sr4export call the magic __d_plt_call routine which is linked
|
||||||
|
|
|
@ -43,8 +43,6 @@ and by Cygnus Support. */
|
||||||
|
|
||||||
* Do we need/want a command to load a shared library?
|
* Do we need/want a command to load a shared library?
|
||||||
|
|
||||||
* Test attaching to running dynamically linked code.
|
|
||||||
|
|
||||||
* Support for hpux8 dynamic linker.
|
* Support for hpux8 dynamic linker.
|
||||||
|
|
||||||
* Support for tracking user calls to dld_load, dld_unload. */
|
* Support for tracking user calls to dld_load, dld_unload. */
|
||||||
|
@ -544,6 +542,29 @@ som_solib_create_inferior_hook()
|
||||||
som_solib_add ((char *) 0, 0, (struct target_ops *) 0);
|
som_solib_add ((char *) 0, 0, (struct target_ops *) 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return the GOT value for the shared library in which ADDR belongs. If
|
||||||
|
ADDR isn't in any known shared library, return zero. */
|
||||||
|
|
||||||
|
CORE_ADDR
|
||||||
|
som_solib_get_got_by_pc (addr)
|
||||||
|
CORE_ADDR addr;
|
||||||
|
{
|
||||||
|
struct so_list *so_list = so_list_head;
|
||||||
|
CORE_ADDR got_value = 0;
|
||||||
|
|
||||||
|
while (so_list)
|
||||||
|
{
|
||||||
|
if (so_list->som_solib.text_addr <= addr
|
||||||
|
&& so_list->som_solib.text_end > addr)
|
||||||
|
{
|
||||||
|
got_value = so_list->som_solib.got_value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
so_list = so_list->next;
|
||||||
|
}
|
||||||
|
return got_value;
|
||||||
|
}
|
||||||
|
|
||||||
/* Dump information about all the currently loaded shared libraries. */
|
/* Dump information about all the currently loaded shared libraries. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -32,6 +32,9 @@ struct target_ops;
|
||||||
extern void
|
extern void
|
||||||
som_solib_add PARAMS ((char *, int, struct target_ops *));
|
som_solib_add PARAMS ((char *, int, struct target_ops *));
|
||||||
|
|
||||||
|
extern CORE_ADDR
|
||||||
|
som_solib_get_got_by_pc PARAMS ((CORE_ADDR));
|
||||||
|
|
||||||
/* Function to be called when the inferior starts up, to discover the names
|
/* Function to be called when the inferior starts up, to discover the names
|
||||||
of shared libraries that are dynamically linked, the base addresses to
|
of shared libraries that are dynamically linked, the base addresses to
|
||||||
which they are linked, and sufficient information to read in their symbols
|
which they are linked, and sufficient information to read in their symbols
|
||||||
|
|
Loading…
Reference in a new issue