2003-08-07 Andrew Cagney <cagney@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Thu, 7 Aug 2003 23:41:57 +0000 (23:41 +0000)
committerAndrew Cagney <cagney@redhat.com>
Thu, 7 Aug 2003 23:41:57 +0000 (23:41 +0000)
* inferior.h (AT_SYMBOL): Define.
* blockframe.c (inside_entry_file): Check for AT_SYMBOL.
* infcall.c (call_function_by_hand): Add code to handle AT_SYMBOL.
* mips-tdep.c (mips_call_dummy_address): Delete function.
(mips_gdbarch_init): Set call_dummy_location to AT_SYMBOL, do not
set call_dummy_address.

gdb/ChangeLog
gdb/blockframe.c
gdb/infcall.c
gdb/inferior.h
gdb/mips-tdep.c

index f18e73bd794fa6b1902cb62eea3178fffbe937a2..df69767afefaa39d4f06b75a5c8c8216fc72cfa9 100644 (file)
@@ -1,3 +1,12 @@
+2003-08-07  Andrew Cagney  <cagney@redhat.com>
+
+       * inferior.h (AT_SYMBOL): Define.
+       * blockframe.c (inside_entry_file): Check for AT_SYMBOL.
+       * infcall.c (call_function_by_hand): Add code to handle AT_SYMBOL.
+       * mips-tdep.c (mips_call_dummy_address): Delete function.
+       (mips_gdbarch_init): Set call_dummy_location to AT_SYMBOL, do not
+       set call_dummy_address.
+
 2003-08-07  Andrew Cagney  <cagney@redhat.com>
 
        * language.c (op_error): Delete function.
index 9a11c900578416d71a0cf5df7c64655c7df4e963..4e689ac644bf4226facef6b108bf1e77681735f9 100644 (file)
@@ -59,7 +59,8 @@ inside_entry_file (CORE_ADDR addr)
     return 1;
   if (symfile_objfile == 0)
     return 0;
-  if (CALL_DUMMY_LOCATION == AT_ENTRY_POINT)
+  if (CALL_DUMMY_LOCATION == AT_ENTRY_POINT
+      || CALL_DUMMY_LOCATION == AT_SYMBOL)
     {
       /* Do not stop backtracing if the pc is in the call dummy
          at the entry point.  */
index 4fd97ae5652d97822f2aaa144063c3b3cb184ae6..a4a6ac10608649ebdc4ec27580f658c24a293a39 100644 (file)
@@ -547,6 +547,23 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
          it's address is the same as the address of the dummy.  */
       bp_addr = dummy_addr;
       break;
+    case AT_SYMBOL:
+      /* Some executables define a symbol __CALL_DUMMY_ADDRESS whose
+        address is the location where the breakpoint should be
+        placed.  Once all targets are using the overhauled frame code
+        this can be deleted - ON_STACK is a better option.  */
+      {
+       struct minimal_symbol *sym;
+
+       sym = lookup_minimal_symbol ("__CALL_DUMMY_ADDRESS", NULL, NULL);
+       real_pc = funaddr;
+       if (sym)
+         dummy_addr = SYMBOL_VALUE_ADDRESS (sym);
+       else
+         dummy_addr = entry_point_address ();
+       bp_addr = dummy_addr;
+       break;
+      }
     default:
       internal_error (__FILE__, __LINE__, "bad switch");
     }
index ed49d2315d9a1bdbfe565fe2dcdb2f371019b1ef..60191f2b98ff9378838802c4817448c151b147bd 100644 (file)
@@ -438,6 +438,7 @@ extern int attach_flag;
 /* Possible values for CALL_DUMMY_LOCATION.  */
 #define ON_STACK 1
 #define AT_ENTRY_POINT 4
+#define AT_SYMBOL 5
 
 /* FIXME: cagney/2000-04-17: gdbarch should manage this.  The default
    shouldn't be necessary. */
index d1d2e38b869114fc4866fd6153c1d1cfa92d84d6..ab860a7b840602ba98579e43f03b787e51bb6c3c 100644 (file)
@@ -5540,25 +5540,6 @@ mips_ignore_helper (CORE_ADDR pc)
 }
 
 
-/* Return a location where we can set a breakpoint that will be hit
-   when an inferior function call returns.  This is normally the
-   program's entry point.  Executables that don't have an entry
-   point (e.g. programs in ROM) should define a symbol __CALL_DUMMY_ADDRESS
-   whose address is the location where the breakpoint should be placed.  */
-
-static CORE_ADDR
-mips_call_dummy_address (void)
-{
-  struct minimal_symbol *sym;
-
-  sym = lookup_minimal_symbol ("__CALL_DUMMY_ADDRESS", NULL, NULL);
-  if (sym)
-    return SYMBOL_VALUE_ADDRESS (sym);
-  else
-    return entry_point_address ();
-}
-
-
 /* When debugging a 64 MIPS target running a 32 bit ABI, the size of
    the register stored on the stack (32) is different to its real raw
    size (64).  The below ensures that registers are fetched from the
@@ -6113,7 +6094,10 @@ mips_gdbarch_init (struct gdbarch_info info,
 
   /* MIPS version of CALL_DUMMY */
 
-  set_gdbarch_call_dummy_address (gdbarch, mips_call_dummy_address);
+  /* NOTE: cagney/2003-08-05: Eventually call dummy location will be
+     replaced by a command, and all targets will default to on stack
+     (regardless of the stack's execute status).  */
+  set_gdbarch_call_dummy_location (gdbarch, AT_SYMBOL);
   set_gdbarch_deprecated_pop_frame (gdbarch, mips_pop_frame);
   set_gdbarch_frame_align (gdbarch, mips_frame_align);
   set_gdbarch_deprecated_save_dummy_frame_tos (gdbarch, generic_save_dummy_frame_tos);