From b1bbe38b3d1906c0df6d5aca0ec28d3b3a43626b Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Thu, 1 Dec 1994 05:34:30 +0000 Subject: * 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. --- gdb/hppa-tdep.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'gdb/hppa-tdep.c') diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c index 687b309..d765b94 100644 --- a/gdb/hppa-tdep.c +++ b/gdb/hppa-tdep.c @@ -1378,6 +1378,19 @@ hppa_fix_call_dummy (dummy, pc, fun, nargs, args, type, gcc_p) at *fun. */ 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) then have sr4export call the magic __d_plt_call routine which is linked -- cgit v1.1