OSDN Git Service

2003-08-27 Andrew Cagney <cagney@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Thu, 28 Aug 2003 02:53:08 +0000 (02:53 +0000)
committerAndrew Cagney <cagney@redhat.com>
Thu, 28 Aug 2003 02:53:08 +0000 (02:53 +0000)
* ppc-linux-tdep.c (ppc64_call_dummy_address): Delete function.
(ppc_linux_init_abi): For PPC64, do not set call_dummy_address.
* infcall.c (call_function_by_hand): Convert the entry point
address into a code address.

gdb/ChangeLog
gdb/infcall.c
gdb/ppc-linux-tdep.c

index 43fcf73..f1be370 100644 (file)
@@ -1,5 +1,12 @@
 2003-08-27  Andrew Cagney  <cagney@redhat.com>
 
+       * ppc-linux-tdep.c (ppc64_call_dummy_address): Delete function.
+       (ppc_linux_init_abi): For PPC64, do not set call_dummy_address.
+       * infcall.c (call_function_by_hand): Convert the entry point
+       address into a code address.
+
+2003-08-27  Andrew Cagney  <cagney@redhat.com>
+
        * dsrec.c: Include "gdb_string.h".
        * Makefile.in (dsrec.o): Update dependencies.
 
index 98e7da5..6baa88a 100644 (file)
@@ -558,6 +558,9 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
        }
       real_pc = funaddr;
       dummy_addr = CALL_DUMMY_ADDRESS ();
+      /* Make certain that the address points at real code, and not a
+         function descriptor.  */
+      dummy_addr = CONVERT_FROM_FUNC_PTR_ADDR (dummy_addr);
       /* A call dummy always consists of just a single breakpoint, so
          it's address is the same as the address of the dummy.  */
       bp_addr = dummy_addr;
@@ -576,6 +579,11 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
          dummy_addr = SYMBOL_VALUE_ADDRESS (sym);
        else
          dummy_addr = entry_point_address ();
+       /* Make certain that the address points at real code, and not
+          a function descriptor.  */
+       dummy_addr = CONVERT_FROM_FUNC_PTR_ADDR (dummy_addr);
+       /* A call dummy always consists of just a single breakpoint,
+          so it's address is the same as the address of the dummy.  */
        bp_addr = dummy_addr;
        break;
       }
index 05b0510..5c8f695 100644 (file)
@@ -929,18 +929,6 @@ ppc64_linux_convert_from_func_ptr_addr (CORE_ADDR addr)
 }
 
 
-/* On 64-bit PowerPC GNU/Linux, the ELF header's e_entry field is the
-   address of a function descriptor for the entry point function, not
-   the actual entry point itself.  So to find the actual address at
-   which execution should begin, we need to fetch the function's entry
-   point from that descriptor.  */
-static CORE_ADDR
-ppc64_call_dummy_address (void)
-{
-  return ppc64_desc_entry_point (entry_point_address ());
-}
-
-
 enum {
   ELF_NGREG = 48,
   ELF_NFPREG = 33,
@@ -1067,8 +1055,6 @@ ppc_linux_init_abi (struct gdbarch_info info,
       set_gdbarch_convert_from_func_ptr_addr
         (gdbarch, ppc64_linux_convert_from_func_ptr_addr);
 
-      set_gdbarch_call_dummy_address (gdbarch, ppc64_call_dummy_address);
-
       set_gdbarch_in_solib_call_trampoline
         (gdbarch, ppc64_in_solib_call_trampoline);
       set_gdbarch_skip_trampoline_code (gdbarch, ppc64_skip_trampoline_code);